diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 84c2e57..0000000 --- a/.babelrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "env": { - "test": { - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": "current" - } - } - ] - ] - } - } -} diff --git a/.env.example b/.env.example index 9663e1d..cb42a3b 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,39 @@ -STORE_ENV=dev -STORE_URL=http://localhost:3000 -NUXT_APP_ENV=development -NUXT_APP_PORT=3000 -MAGENTO_GRAPHQL=https://{YOUR_SITE_FRONT_URL}/graphql -MAGENTO_EXTERNAL_CHECKOUT=false -MAGENTO_EXTERNAL_CHECKOUT_URL=https://{YOUR_SITE_FRONT_URL} -MAGENTO_EXTERNAL_CHECKOUT_SYNC_PATH=/vue/cart/sync +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 + +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 + +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 + +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 + +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 + +VSF_COOKIE_HTTP_ONLY= +VSF_COOKIE_SECURE= +VSF_COOKIE_SAME_SITE= +VSF_COOKIE_PATH= + +NODE_TLS_REJECT_UNAUTHORIZED=0 diff --git a/.gitignore b/.gitignore index 0751876..39e9435 100644 --- a/.gitignore +++ b/.gitignore @@ -93,6 +93,9 @@ sw.* *.swp version -.env -!config/example.json -config/*.json +.env.* +!.env.example + +## SSL +# Untrack all keys +*.pem diff --git a/.lintstagedrc b/.lintstagedrc deleted file mode 100644 index ceb5029..0000000 --- a/.lintstagedrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "*.{js,jsx}": [ - "eslint --fix" - ], - "*.{ts,tsx}": [ - "eslint --fix" - ], - "*.{vue}": [ - "eslint --fix" - ], -} diff --git a/README.md b/README.md index 1507051..84de79c 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,23 @@ + +
  
+# DEPRECATED +**This repository is deprecated and no longer maintained. The new repository can be found [HERE](https://github.com/vuestorefront/storefront-nuxt2-magento2.git)** + # Magento 2.x theme -### Vue Storefront 2 integration with Magento + +[![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors-) + -This theme developed by superheroes from [Caravel](https://github.com/caravelx) ❤️ - -
- -
+### Vue Storefront 2 integration with Magento ### Requirements: -- NodeJS v14 or later +- NodeJS v16 or later - Yarn - Magento >= v2.4.3 instance for GraphQL endpoint - Change Magento GraphQL Query Complexity and Depth values @@ -62,6 +65,7 @@ For detailed explanation on how things work, check out [Nuxt.js docs](https://nu ## Contributors ✨ ### Honorable Mentions +- [Caravel x](https://www.caravelx.com/) - [Cyberfuze](https://cyberfuze.com/) - [Leonex](https://www.leonex.de/) @@ -74,22 +78,33 @@ Thanks go to these wonderful people 🙌:
Heitor Ramon Ribeiro

💻 🚧 📖 📆
Alef Barbeli

💻 📖 -
Dominik Deimel

💻 📖 -
Lior Lindvor

💻
Henrique Lopes

💻 📖 +
Đại Lộc Lê Quang

💻 +
Bogdan Podlesnii

💻 -
Đại Lộc Lê Quang

💻 -
Bogdan Podlesnii

💻 +
Patrick Monteiro

💻 +
Kevin Gorjan

💻 📖 +
Bartosz Herba

💻 📖 🚧 🧑‍🏫 👀 +
Marcin Kwiatkowski

💻 📆 💼 📖 🤔 🚧 🧑‍🏫 👀
Filip Rakowski

💬 🧑‍🏫 👀 -
Filip Sobol

💬 🧑‍🏫 👀 -
Patryk Andrzejewski

💬 🧑‍🏫 👀 +
Filip Sobol

💬 🧑‍🏫 👀 📖 +
Patryk Andrzejewski

💬 🧑‍🏫 👀
Renan Oliveira

🔧 🔌 -
Patrick Monteiro

💻 -
Kevin Gorjan

💻 -
Bartosz Herba

💻 +
Dominik Deimel

💻 📖 +
Lior Lindvor

💻 + + +
Artur Tagisow

💻 +
Jonathan Ribas

💻 +
Ali Ghanei

💻 +
Maya Shavin

📖 +
Alexander Devitsky

💻 + + +
Diego Alba

💻 @@ -99,3 +114,4 @@ Thanks go to these wonderful people 🙌: This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! + diff --git a/app/router.scrollBehavior.js b/app/router.scrollBehavior.js index 4e0816d..64be137 100644 --- a/app/router.scrollBehavior.js +++ b/app/router.scrollBehavior.js @@ -1,6 +1,6 @@ -export default function (_to, _from, savedPosition) { +export default function scrollBehavior(_to, _from, savedPosition) { return savedPosition || { x: 0, y: 0, }; -}; +} diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..2207af6 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,17 @@ +/* eslint-disable unicorn/prefer-module */ +module.exports = { + env: { + test: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + }, + ], + ], + }, + }, +}; diff --git a/components/AddToWishlist.vue b/components/AddToWishlist.vue new file mode 100644 index 0000000..6406db8 --- /dev/null +++ b/components/AddToWishlist.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/components/AppFooter.vue b/components/AppFooter.vue index 89a0aab..fe82b30 100644 --- a/components/AppFooter.vue +++ b/components/AppFooter.vue @@ -1,11 +1,15 @@ - diff --git a/components/CallToAction.vue b/components/CallToAction.vue new file mode 100644 index 0000000..59d379e --- /dev/null +++ b/components/CallToAction.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/components/CartSidebar.vue b/components/CartSidebar.vue index 9827ed9..aba1844 100644 --- a/components/CartSidebar.vue +++ b/components/CartSidebar.vue @@ -4,6 +4,7 @@ v-e2e="'sidebar-cart'" :visible="isCartSidebarOpen" :title="$t('My Cart')" + position="right" class="sf-sidebar--right" @close="toggleCartSidebar" > @@ -38,22 +39,23 @@ >
@@ -63,136 +65,183 @@
- -
- - -
+ -
- - +
+ - - + + + + +
-
-
-
- - +
+
+ + +
-
- + + - - - diff --git a/components/CategoryPageHeader.vue b/components/CategoryPageHeader.vue deleted file mode 100644 index 4903e3a..0000000 --- a/components/CategoryPageHeader.vue +++ /dev/null @@ -1,251 +0,0 @@ - - - - - diff --git a/components/Checkout/UserBillingAddresses.vue b/components/Checkout/UserBillingAddresses.vue deleted file mode 100644 index 09fbed4..0000000 --- a/components/Checkout/UserBillingAddresses.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/components/Checkout/UserShippingAddresses.vue b/components/Checkout/UserShippingAddresses.vue deleted file mode 100644 index 0945daa..0000000 --- a/components/Checkout/UserShippingAddresses.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - - - diff --git a/components/Checkout/VsfPaymentProvider.vue b/components/Checkout/VsfPaymentProvider.vue deleted file mode 100644 index 471c661..0000000 --- a/components/Checkout/VsfPaymentProvider.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - diff --git a/components/ContentBlock.vue b/components/ContentBlock.vue index 118cde2..e5a2462 100644 --- a/components/ContentBlock.vue +++ b/components/ContentBlock.vue @@ -8,12 +8,18 @@ {{ title }}
-
+
- diff --git a/components/ContentBlocks.vue b/components/ContentBlocks.vue index 3e95da6..9c939da 100644 --- a/components/ContentBlocks.vue +++ b/components/ContentBlocks.vue @@ -8,35 +8,39 @@ />
- diff --git a/components/CouponCode.vue b/components/CouponCode.vue index 67af779..39815e7 100644 --- a/components/CouponCode.vue +++ b/components/CouponCode.vue @@ -1,40 +1,42 @@ - diff --git a/components/CurrencySelector.vue b/components/CurrencySelector.vue new file mode 100644 index 0000000..ebbc34a --- /dev/null +++ b/components/CurrencySelector.vue @@ -0,0 +1,101 @@ + + + + diff --git a/components/CurrencySelector/CurrenciesModal.vue b/components/CurrencySelector/CurrenciesModal.vue new file mode 100644 index 0000000..b1708ea --- /dev/null +++ b/components/CurrencySelector/CurrenciesModal.vue @@ -0,0 +1,132 @@ + + + diff --git a/components/CurrencySelector/__tests__/CurrencySelector.spec.ts b/components/CurrencySelector/__tests__/CurrencySelector.spec.ts new file mode 100644 index 0000000..d063ddf --- /dev/null +++ b/components/CurrencySelector/__tests__/CurrencySelector.spec.ts @@ -0,0 +1,80 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; +import CurrenciesModal from '~/components/CurrencySelector/CurrenciesModal.vue'; +import { useCurrencyMock } from '~/tests/unit/mocks/useCurrency'; +import { useCurrency } from '~/composables'; +import { currencyDataMock } from '~/components/CurrencySelector/__tests__/currencyData.mock'; + +jest.mock('~/composables', () => { + const originalModule = jest.requireActual('~/composables'); + return { + ...originalModule, + useCurrency: jest.fn(), + }; +}); + +describe('', () => { + it('does not render when closed', () => { + (useCurrency as jest.Mock).mockReturnValue(useCurrencyMock); + const { queryByRole } = render(CurrenciesModal, { + props: { + isModalOpen: false, + }, + }); + + expect(queryByRole('heading', { name: /change store/i })).toBeNull(); + }); + + it('emits "closeModal" event on close', async () => { + const user = userEvent.setup(); + + (useCurrency as jest.Mock).mockReturnValue(useCurrencyMock); + const { getAllByRole, emitted } = render(CurrenciesModal, { + props: { + isModalOpen: true, + }, + }); + + const closeBtn = getAllByRole('button', { name: /close/i })[0]; + + await user.click(closeBtn); + + expect(emitted()).toHaveProperty('closeModal'); + }); + + it('renders list of available stores', () => { + useCurrencyMock.currency.value = currencyDataMock; + + (useCurrency as jest.Mock).mockReturnValue(useCurrencyMock); + + const { getByRole, getByText } = render(CurrenciesModal, { + props: { + isModalOpen: true, + }, + }); + + expect(getByRole('heading', { name: /choose currency/i })).toBeTruthy(); + expect(getByText(/eur/i)).toBeTruthy(); + expect(getByText(/pln/i)).toBeTruthy(); + expect(getByText(/usd/i)).toBeTruthy(); + }); + + it('on currency selection executes method that must trigger currency switch', async () => { + const user = userEvent.setup(); + useCurrencyMock.currency.value = currencyDataMock; + + (useCurrency as jest.Mock).mockReturnValue(useCurrencyMock); + + const { getByText } = render(CurrenciesModal, { + props: { + isLangModalOpen: true, + storeConfig: { store_code: 'default' }, + }, + }); + + const eurSwitchBtn = getByText(/eur/i); + await user.click(eurSwitchBtn); + + expect(useCurrencyMock.change).toBeCalledWith({ id: 'EUR' }); + }); +}); diff --git a/components/CurrencySelector/__tests__/currencyData.mock.ts b/components/CurrencySelector/__tests__/currencyData.mock.ts new file mode 100644 index 0000000..dfe0305 --- /dev/null +++ b/components/CurrencySelector/__tests__/currencyData.mock.ts @@ -0,0 +1,31 @@ +export const currencyDataMock = { + __typename: 'Currency', + available_currency_codes: [ + 'EUR', + 'PLN', + 'USD', + ], + base_currency_code: 'USD', + base_currency_symbol: '$', + default_display_currecy_code: null, + default_display_currecy_symbol: null, + default_display_currency_code: 'USD', + default_display_currency_symbol: '$', + exchange_rates: [ + { + __typename: 'ExchangeRate', + currency_to: 'EUR', + rate: 0.93, + }, + { + __typename: 'ExchangeRate', + currency_to: 'PLN', + rate: 4.29, + }, + { + __typename: 'ExchangeRate', + currency_to: 'USD', + rate: 1, + }, + ], +}; diff --git a/components/FiltersSidebar.vue b/components/FiltersSidebar.vue deleted file mode 100644 index 8e795e7..0000000 --- a/components/FiltersSidebar.vue +++ /dev/null @@ -1,249 +0,0 @@ - - - - - diff --git a/components/General/IconSprite.vue b/components/General/IconSprite.vue new file mode 100644 index 0000000..be6919c --- /dev/null +++ b/components/General/IconSprite.vue @@ -0,0 +1,748 @@ + + + + diff --git a/components/General/SvgImage.vue b/components/General/SvgImage.vue new file mode 100644 index 0000000..8af3db2 --- /dev/null +++ b/components/General/SvgImage.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/components/HTMLContent.vue b/components/HTMLContent.vue new file mode 100644 index 0000000..427eef0 --- /dev/null +++ b/components/HTMLContent.vue @@ -0,0 +1,23 @@ + + diff --git a/components/Header/Navigation/HeaderNavigation.vue b/components/Header/Navigation/HeaderNavigation.vue new file mode 100644 index 0000000..947f5a6 --- /dev/null +++ b/components/Header/Navigation/HeaderNavigation.vue @@ -0,0 +1,138 @@ + + + diff --git a/components/Header/Navigation/HeaderNavigationItem.vue b/components/Header/Navigation/HeaderNavigationItem.vue new file mode 100644 index 0000000..2cdb573 --- /dev/null +++ b/components/Header/Navigation/HeaderNavigationItem.vue @@ -0,0 +1,51 @@ + + + diff --git a/components/Header/Navigation/HeaderNavigationSubcategories.vue b/components/Header/Navigation/HeaderNavigationSubcategories.vue new file mode 100644 index 0000000..b83802c --- /dev/null +++ b/components/Header/Navigation/HeaderNavigationSubcategories.vue @@ -0,0 +1,230 @@ + + + diff --git a/components/Header/Navigation/__tests__/HeaderNavigation.spec.js b/components/Header/Navigation/__tests__/HeaderNavigation.spec.js new file mode 100644 index 0000000..710ac25 --- /dev/null +++ b/components/Header/Navigation/__tests__/HeaderNavigation.spec.js @@ -0,0 +1,92 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; + +import { useUiHelpers } from '~/composables'; +import useUiHelpersMock from '~/tests/unit/mocks/useUiHelpersMock'; +import CategoryTreeDataMock from '~/tests/unit/mocks/categoryTreeDataMock'; +import HeaderNavigation from '../HeaderNavigation.vue'; + +jest.mock('~/composables'); +useUiHelpers.mockReturnValue(useUiHelpersMock()); + +const sharedOptions = { props: { categoryTree: CategoryTreeDataMock[0].children } }; +describe('HeaderNavigation', () => { + it('displays main categories', () => { + const { getByRole } = render(HeaderNavigation, sharedOptions); + getByRole('link', { name: /women/i }); + getByRole('link', { name: /gear/i }); + getByRole('link', { name: /training/i }); + }); + + it('subcategories are hidden by default', () => { + const { queryByTestId } = render(HeaderNavigation, sharedOptions); + expect(queryByTestId(/navigation-subcategories/i)).toBeNull(); + }); + + it('subcategories are displayed on @mouseenter', async () => { + const user = userEvent.setup(); + const { getByTestId, getByRole } = render(HeaderNavigation, sharedOptions); + const womenCategory = getByTestId('MjA='); + + await user.hover(womenCategory); + getByTestId(/navigation-subcategories/i); + getByRole('link', { name: /tops/i }); + getByRole('link', { name: /jackets/i }); + }); + + it('main link is focused on @keyup.tab', async () => { + const user = userEvent.setup(); + const { getByTestId } = render(HeaderNavigation, sharedOptions); + const womenCategory = getByTestId('MjA='); + + await user.tab(); // "What's new" no children category + await user.tab(); // "Women" category with children + + expect(womenCategory).toHaveFocus(); + }); + + it('user can traverse cat links with arrow keys', async () => { + const user = userEvent.setup(); + const { getByTestId } = render(HeaderNavigation, sharedOptions); + const whatsNewCategory = getByTestId('Mzg='); + const womenCategory = getByTestId('MjA='); + const menCategory = getByTestId('MTE='); + const gearCategory = getByTestId('Mw=='); + + // Moving right + await user.tab(); // "What's new" no children category + expect(whatsNewCategory).toHaveFocus(); + await user.keyboard('{ArrowRight}'); + expect(womenCategory).toHaveFocus(); + await user.keyboard('{ArrowRight}'); + expect(menCategory).toHaveFocus(); + await user.keyboard('{ArrowRight}'); + expect(gearCategory).toHaveFocus(); + + // Moving left + await user.keyboard('{ArrowLeft}'); + expect(menCategory).toHaveFocus(); + await user.keyboard('{ArrowLeft}'); + expect(womenCategory).toHaveFocus(); + await user.keyboard('{ArrowLeft}'); + expect(whatsNewCategory).toHaveFocus(); + }); + + it('user can open submenu with @keydown.down and close it with @keydown.up', async () => { + const user = userEvent.setup(); + const { getByTestId, getByRole, queryByTestId } = render(HeaderNavigation, sharedOptions); + const womenCategory = getByTestId('MjA='); + + await user.tab(); // "What's new" no children category + await user.keyboard('{ArrowRight}'); + expect(womenCategory).toHaveFocus(); + + await user.keyboard('{ArrowDown}'); + getByTestId(/navigation-subcategories/i); + getByRole('link', { name: /tops/i }); + getByRole('link', { name: /jackets/i }); + + await user.keyboard('{ArrowUp}'); + expect(queryByTestId('navigation-subcategories')).toBeFalsy(); + }); +}); diff --git a/components/Header/Navigation/__tests__/HeaderNavigationItem.spec.js b/components/Header/Navigation/__tests__/HeaderNavigationItem.spec.js new file mode 100644 index 0000000..df96d03 --- /dev/null +++ b/components/Header/Navigation/__tests__/HeaderNavigationItem.spec.js @@ -0,0 +1,12 @@ +import { render } from '~/tests/unit/test-utils'; +import HeaderNavigationItem from '../HeaderNavigationItem.vue'; + +describe('HeaderNavigationItem', () => { + it('display proper label and link', () => { + const testLabel = 'test_label'; + const testLink = 'http://some_path/'; + const { getByText, getByRole } = render(HeaderNavigationItem, { props: { label: testLabel, link: testLink } }); + getByText(testLabel); + expect(getByRole('link', { name: /test_label/i })).toHaveAttribute('href', testLink); + }); +}); diff --git a/components/Header/Navigation/__tests__/HeaderNavigationSubcategories.spec.js b/components/Header/Navigation/__tests__/HeaderNavigationSubcategories.spec.js new file mode 100644 index 0000000..0e06549 --- /dev/null +++ b/components/Header/Navigation/__tests__/HeaderNavigationSubcategories.spec.js @@ -0,0 +1,54 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; +import CategoryTreeDataMock from '~/tests/unit/mocks/categoryTreeDataMock'; +import { useUiHelpers } from '~/composables'; +import useUiHelpersMock from '~/tests/unit/mocks/useUiHelpersMock'; +import HeaderNavigationSubcategories from '../HeaderNavigationSubcategories.vue'; + +jest.mock('~/composables'); +useUiHelpers.mockReturnValue(useUiHelpersMock()); + +// Women category selection +const childrenProps = { props: { currentCategory: CategoryTreeDataMock[0].children[1] } }; +const noChildrenProps = { props: { currentCategory: CategoryTreeDataMock[0].children[0] } }; + +describe('HeaderNavigationSubcategories', () => { + it('displays level 1 children category links', () => { + const { getByRole } = render(HeaderNavigationSubcategories, childrenProps); + getByRole('link', { name: /tops/i }); + getByRole('link', { name: /bottoms/i }); + }); + + it('displays level 2 children category links', () => { + const { getByRole } = render(HeaderNavigationSubcategories, childrenProps); + getByRole('link', { name: /jackets/i }); + getByRole('link', { name: /hoodies & sweatshirts/i }); + getByRole('link', { name: /tees/i }); + getByRole('link', { name: /tanks/i }); + }); + + it('do not display any links if root category has no children', () => { + const { queryByTestId } = render(HeaderNavigationSubcategories, noChildrenProps); + expect(queryByTestId(/navigation-subcategories/i)).toBeNull(); + }); + + it('should emit "hideSubcategories" event when linkLv1 is clicked', async () => { + const user = userEvent.setup(); + const { getByRole, emitted } = render(HeaderNavigationSubcategories, childrenProps); + const lvl1Link = getByRole('link', { name: /tops/i }); + + await user.click(lvl1Link); + + expect(emitted()).toHaveProperty('hideSubcategories'); + }); + + it('should emit "hideSubcategories" event when linkLv2 is clicked', async () => { + const user = userEvent.setup(); + const { getByRole, emitted } = render(HeaderNavigationSubcategories, childrenProps); + const lvl2Link = getByRole('link', { name: /jackets/i }); + + await user.click(lvl2Link); + + expect(emitted()).toHaveProperty('hideSubcategories'); + }); +}); diff --git a/components/Header/SearchBar/SearchBar.vue b/components/Header/SearchBar/SearchBar.vue new file mode 100644 index 0000000..faf386f --- /dev/null +++ b/components/Header/SearchBar/SearchBar.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/components/SearchResults.vue b/components/Header/SearchBar/SearchResults.vue similarity index 59% rename from components/SearchResults.vue rename to components/Header/SearchBar/SearchResults.vue index 66c0e62..af766ef 100644 --- a/components/SearchResults.vue +++ b/components/Header/SearchBar/SearchResults.vue @@ -1,7 +1,7 @@ - diff --git a/components/Products/RelatedProducts.vue b/components/Products/RelatedProducts.vue deleted file mode 100644 index 67fe486..0000000 --- a/components/Products/RelatedProducts.vue +++ /dev/null @@ -1,41 +0,0 @@ - - diff --git a/components/Products/UpsellProducts.vue b/components/Products/UpsellProducts.vue deleted file mode 100644 index 09338e0..0000000 --- a/components/Products/UpsellProducts.vue +++ /dev/null @@ -1,41 +0,0 @@ - - diff --git a/components/ProductsCarousel.vue b/components/ProductsCarousel.vue deleted file mode 100644 index 5fae8e4..0000000 --- a/components/ProductsCarousel.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - diff --git a/components/RelatedProducts.vue b/components/RelatedProducts.vue deleted file mode 100644 index f6e7748..0000000 --- a/components/RelatedProducts.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - diff --git a/components/SkeletonLoader/index.vue b/components/SkeletonLoader/index.vue new file mode 100644 index 0000000..9992e22 --- /dev/null +++ b/components/SkeletonLoader/index.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/components/StoreSwitcher.vue b/components/StoreSwitcher.vue new file mode 100644 index 0000000..ad8a4f7 --- /dev/null +++ b/components/StoreSwitcher.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/components/StoreSwitcher/StoresModal.vue b/components/StoreSwitcher/StoresModal.vue new file mode 100644 index 0000000..691dd86 --- /dev/null +++ b/components/StoreSwitcher/StoresModal.vue @@ -0,0 +1,153 @@ + + + diff --git a/components/StoreSwitcher/__tests__/StoresModal.spec.ts b/components/StoreSwitcher/__tests__/StoresModal.spec.ts new file mode 100644 index 0000000..591a5f0 --- /dev/null +++ b/components/StoreSwitcher/__tests__/StoresModal.spec.ts @@ -0,0 +1,81 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; +import StoresModal from '~/components/StoreSwitcher/StoresModal.vue'; +import { useStoreMock } from '~/tests/unit/mocks/useStore'; +import { useStore } from '~/composables'; +import { availableStoresMock } from '~/components/StoreSwitcher/__tests__/availableStores.mock'; + +jest.mock('~/composables', () => { + const originalModule = jest.requireActual('~/composables'); + return { + ...originalModule, + useStore: jest.fn(), + }; +}); + +describe('', () => { + it('does not render when closed', () => { + (useStore as jest.Mock).mockReturnValue(useStoreMock); + const { queryByRole } = render(StoresModal, { + props: { + isLangModalOpen: false, + }, + }); + + expect(queryByRole('heading', { name: /change store/i })).toBeNull(); + }); + + it('emits "closeModal" event on close', async () => { + const user = userEvent.setup(); + + (useStore as jest.Mock).mockReturnValue(useStoreMock); + const { getAllByRole, emitted } = render(StoresModal, { + props: { + isLangModalOpen: true, + }, + }); + + const closeBtn = getAllByRole('button', { name: /close/i })[0]; + + await user.click(closeBtn); + + expect(emitted()).toHaveProperty('closeModal'); + }); + + it('renders list of available stores', () => { + useStoreMock.stores.value = availableStoresMock; + + (useStore as jest.Mock).mockReturnValue(useStoreMock); + + const { getByRole, getByText } = render(StoresModal, { + props: { + isLangModalOpen: true, + storeConfig: { store_code: 'default' }, + }, + }); + + getByRole('heading', { name: /change store/i }); + getByText(/default store view/i); + getByText(/german/i); + }); + + it('on store selection executes method that should redirect to a desired store', async () => { + const user = userEvent.setup(); + useStoreMock.stores.value = availableStoresMock; + + (useStore as jest.Mock).mockReturnValue(useStoreMock); + + const { getByText } = render(StoresModal, { + props: { + isLangModalOpen: true, + storeConfig: { store_code: 'default' }, + }, + }); + + const defaultStoreSwitchBtn = getByText(/default store view/i); + + await user.click(defaultStoreSwitchBtn); + + expect(useStoreMock.change).toBeCalledWith(availableStoresMock[0]); + }); +}); diff --git a/components/StoreSwitcher/__tests__/availableStores.mock.ts b/components/StoreSwitcher/__tests__/availableStores.mock.ts new file mode 100644 index 0000000..8e12963 --- /dev/null +++ b/components/StoreSwitcher/__tests__/availableStores.mock.ts @@ -0,0 +1,136 @@ +export const availableStoresMock = [ + { + __typename: 'StoreConfig', + absolute_footer: null, + allow_guests_to_write_product_reviews: '1', + allow_items: null, + allow_order: null, + autocomplete_on_storefront: false, + base_currency_code: 'USD', + base_link_url: 'https://magento2-instance.vuestorefront.io/', + base_media_url: 'https://magento2-instance.vuestorefront.io/media/', + base_static_url: 'https://magento2-instance.vuestorefront.io/static/version1654847492/', + base_url: 'https://magento2-instance.vuestorefront.io/', + catalog_default_sort_by: 'position', + category_fixed_product_tax_display_setting: 'FPT_DISABLED', + category_url_suffix: '.html', + cms_home_page: 'home', + cms_no_cookies: 'enable-cookies', + cms_no_route: 'no-route', + code: 'default', + id: 1, + is_default_store: true, + is_default_store_group: true, + list_mode: 'grid-list', + list_per_page: 10, + list_per_page_values: '5,10,15,20,25', + locale: 'en_US', + logo_alt: null, + logo_height: null, + logo_width: null, + magento_wishlist_general_is_enabled: '1', + minimum_password_length: '8', + no_route: 'cms/noroute/index', + payment_payflowpro_cc_vault_active: null, + product_fixed_product_tax_display_setting: 'FPT_DISABLED', + product_reviews_enabled: '1', + product_url_suffix: '.html', + required_character_classes_number: '3', + root_category_id: 2, + root_category_uid: 'Mg==', + sales_fixed_product_tax_display_setting: 'FPT_DISABLED', + secure_base_link_url: 'https://magento2-instance.vuestorefront.io/', + secure_base_media_url: 'https://magento2-instance.vuestorefront.io/media/', + secure_base_static_url: 'https://magento2-instance.vuestorefront.io/static/version1654847492/', + secure_base_url: 'https://magento2-instance.vuestorefront.io/', + show_cms_breadcrumbs: 1, + store_code: 'default', + store_group_code: 'main_website_store', + store_group_name: 'Main Website Store', + store_name: 'Default Store View', + store_sort_order: 0, + timezone: 'America/Chicago', + title_prefix: null, + title_separator: '-', + title_suffix: null, + use_store_in_url: false, + website_code: 'base', + website_id: 1, + website_name: 'Main Website', + weight_unit: 'lbs', + welcome: 'Default welcome msg!', + }, + { + __typename: 'StoreConfig', + absolute_footer: null, + allow_guests_to_write_product_reviews: '1', + allow_items: null, + allow_order: null, + autocomplete_on_storefront: false, + base_currency_code: 'USD', + base_link_url: 'https://magento2-instance.vuestorefront.io/', + base_media_url: 'https://magento2-instance.vuestorefront.io/media/', + base_static_url: 'https://magento2-instance.vuestorefront.io/static/version1654847492/', + base_url: 'https://magento2-instance.vuestorefront.io/', + catalog_default_sort_by: 'position', + category_fixed_product_tax_display_setting: 'FPT_DISABLED', + category_url_suffix: '.html', + cms_home_page: 'home', + cms_no_cookies: 'enable-cookies', + cms_no_route: 'no-route', + code: 'german', + configurable_thumbnail_source: 'parent', + copyright: 'Copyright © 2013-present Magento, Inc. All rights reserved.', + default_description: null, + default_display_currency_code: 'USD', + default_keywords: null, + default_title: 'Magento Commerce', + front: 'cms', + grid_per_page: 12, + grid_per_page_values: '12,24,36', + head_includes: '', + head_shortcut_icon: null, + header_logo_src: null, + id: 2, + is_default_store: false, + is_default_store_group: true, + list_mode: 'grid-list', + list_per_page: 10, + list_per_page_values: '5,10,15,20,25', + locale: 'de_DE', + logo_alt: null, + logo_height: null, + logo_width: null, + magento_wishlist_general_is_enabled: '1', + minimum_password_length: '8', + no_route: 'cms/noroute/index', + payment_payflowpro_cc_vault_active: null, + product_fixed_product_tax_display_setting: 'FPT_DISABLED', + product_reviews_enabled: '1', + product_url_suffix: '.html', + required_character_classes_number: '3', + root_category_id: 2, + root_category_uid: 'Mg==', + sales_fixed_product_tax_display_setting: 'FPT_DISABLED', + secure_base_link_url: 'https://magento2-instance.vuestorefront.io/', + secure_base_media_url: 'https://magento2-instance.vuestorefront.io/media/', + secure_base_static_url: 'https://magento2-instance.vuestorefront.io/static/version1654847492/', + secure_base_url: 'https://magento2-instance.vuestorefront.io/', + show_cms_breadcrumbs: 1, + store_code: 'german', + store_group_code: 'main_website_store', + store_group_name: 'Main Website Store', + store_name: 'German', + store_sort_order: 0, + timezone: 'America/Chicago', + title_prefix: null, + title_separator: '-', + title_suffix: null, + use_store_in_url: false, + website_code: 'base', + website_id: 1, + website_name: 'Main Website', + weight_unit: 'lbs', + welcome: 'Default welcome msg!', + }, +]; diff --git a/components/TopBar.vue b/components/TopBar.vue deleted file mode 100644 index 83a78e2..0000000 --- a/components/TopBar.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - diff --git a/components/TopBar/TopBar.vue b/components/TopBar/TopBar.vue new file mode 100644 index 0000000..7ca6de2 --- /dev/null +++ b/components/TopBar/TopBar.vue @@ -0,0 +1,68 @@ + + + + diff --git a/components/TopBar/checkStoresAndCurrency.gql.ts b/components/TopBar/checkStoresAndCurrency.gql.ts new file mode 100644 index 0000000..5dbc99d --- /dev/null +++ b/components/TopBar/checkStoresAndCurrency.gql.ts @@ -0,0 +1,10 @@ +export default ` + query getStoresAndCurrencies { + availableStores { + store_code + } + currency { + available_currency_codes + } + } +`; diff --git a/components/TopBar/useTopBar.ts b/components/TopBar/useTopBar.ts new file mode 100644 index 0000000..95c7255 --- /dev/null +++ b/components/TopBar/useTopBar.ts @@ -0,0 +1,37 @@ +import { ref, onMounted } from '@nuxtjs/composition-api'; +import type { Currency, StoreConfig } from '~/modules/GraphQL/types'; + +import { useApi } from '~/composables/useApi'; +import checkStoresAndCurrencyQuery from './checkStoresAndCurrency.gql'; + +type StoresAndCurrencyQueryResponse = { + availableStores: Pick[], + currency: Pick, +}; + +export const useTopBar = () => { + const { query } = useApi(); + const hasStoresToSelect = ref(null); + const hasCurrencyToSelect = ref(null); + + onMounted(() => { + query(checkStoresAndCurrencyQuery) + .then((response) => { + // eslint-disable-next-line promise/always-return + hasStoresToSelect.value = response?.data?.availableStores.length > 1 ?? false; + // eslint-disable-next-line promise/always-return + hasCurrencyToSelect.value = response?.data?.currency.available_currency_codes.length > 1 ?? false; + }) + .catch(() => { + hasStoresToSelect.value = false; + hasCurrencyToSelect.value = false; + }); + }); + + return { + hasStoresToSelect, + hasCurrencyToSelect, + }; +}; + +export default useTopBar; diff --git a/components/UserAddressDetails.vue b/components/UserAddressDetails.vue index 0836bd2..1738653 100644 --- a/components/UserAddressDetails.vue +++ b/components/UserAddressDetails.vue @@ -1,14 +1,7 @@ - diff --git a/components/UserShippingAddress.vue b/components/UserShippingAddress.vue deleted file mode 100644 index fbd08c2..0000000 --- a/components/UserShippingAddress.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/components/WishlistSidebar.vue b/components/WishlistSidebar.vue deleted file mode 100644 index 8286f79..0000000 --- a/components/WishlistSidebar.vue +++ /dev/null @@ -1,290 +0,0 @@ - - - - diff --git a/components/__tests__/AddtoWishlist.spec.js b/components/__tests__/AddtoWishlist.spec.js new file mode 100644 index 0000000..b36a4e3 --- /dev/null +++ b/components/__tests__/AddtoWishlist.spec.js @@ -0,0 +1,51 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; +// @ts-ignore +import AddToWishlist from '../AddToWishlist.vue'; + +describe('', () => { + it('Should not render add to wishlist button because isShow prop equals false by default', () => { + const { queryByText } = render(AddToWishlist); + + expect(queryByText('Add to wishlist')).toBeNull(); + }); + + it('Should render add to wishlist button', () => { + const { getByText } = render(AddToWishlist, { + props: { + isShow: true, + }, + }); + + const button = getByText('Add to Wishlist'); + expect(button).toBeInTheDocument(); + }); + + it('Should render remove from wishlist button', () => { + const { getByText } = render(AddToWishlist, { + props: { + isShow: true, + isInWishlist: true, + }, + }); + + const button = getByText('Remove from Wishlist'); + expect(button).toBeInTheDocument(); + }); + + it('Should emit clock event when add to wishlist button is clicked', async () => { + const user = userEvent.setup(); + + const { getByText, emitted } = render(AddToWishlist, { + props: { + isShow: true, + }, + }); + + const button = getByText('Add to Wishlist'); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + await user.click(button); + + expect(emitted()).toHaveProperty('addToWishlist'); + }); +}); diff --git a/components/__tests__/BottomNavigation.spec.ts b/components/__tests__/BottomNavigation.spec.ts new file mode 100644 index 0000000..f2a6815 --- /dev/null +++ b/components/__tests__/BottomNavigation.spec.ts @@ -0,0 +1,157 @@ +import { render, waitFor } from '@testing-library/vue'; +import userEvent from '@testing-library/user-event'; + +import { createLocalVue } from '@vue/test-utils'; +import { PiniaVuePlugin } from 'pinia'; +import { createTestingPinia } from '@pinia/testing'; +import { ref } from '@nuxtjs/composition-api'; +import { useUser } from '~/modules/customer/composables/useUser'; +import { useUiState } from '~/composables'; +import { useUiStateMock, useUserMock } from '~/tests/unit/test-utils'; + +import { useCategoryStore } from '~/modules/catalog/category/stores/category'; +import BottomNavigation from '../BottomNavigation.vue'; + +jest.mock('~/composables/useUiState', () => ({ + useUiState: jest.fn(), +})); + +jest.mock('~/modules/customer/composables/useUser', () => ({ + useUser: jest.fn(), +})); + +(useUser as jest.Mock).mockReturnValue(useUserMock()); +(useUiState as jest.Mock).mockReturnValue(useUiStateMock()); + +const localVue = createLocalVue(); +localVue.use(PiniaVuePlugin); + +describe('BottomNavigation', () => { + it('handles "Home" button click', async () => { + const routerPushMock = jest.fn(); + + const { getByTestId } = render( + BottomNavigation, + { + mocks: { + $router: { + push: routerPushMock, + }, + $route: { + name: 'home', + }, + }, + localVue, + pinia: createTestingPinia(), + }, + ); + + const homeButton = getByTestId('bottom-navigation-home'); + userEvent.click(homeButton); + await waitFor(() => { + expect(routerPushMock).toHaveBeenCalledWith({ name: 'home' }); + }); + }); + it('handles "Menu" (categories) button click', async () => { + const { getByTestId } = render( + BottomNavigation, + { + mocks: { + $route: { + name: 'home', + }, + }, + localVue, + pinia: createTestingPinia(), + }, + ); + + const categoryStore = useCategoryStore(); + + const menuButton = getByTestId('bottom-navigation-menu'); + userEvent.click(menuButton); + await waitFor(() => { + expect(categoryStore.load).toHaveBeenCalled(); + }); + }); + it('handles "Wishlist" button click', async () => { + const useUiStateMockInstance = useUiStateMock(); + (useUiState as jest.Mock).mockReturnValueOnce(useUiStateMockInstance); + const useUserMockInstance = useUserMock({ isAuthenticated: ref(true) }); + (useUser as jest.Mock).mockReturnValueOnce(useUserMockInstance); + + const { getByTestId } = render( + BottomNavigation, + { + mocks: { + $route: { + name: 'home', + }, + }, + localVue, + pinia: createTestingPinia(), + }, + ); + + const wishlistButton = getByTestId('bottom-navigation-wishlist'); + userEvent.click(wishlistButton); + await waitFor(() => { + expect(useUiStateMockInstance.toggleWishlistSidebar).toHaveBeenCalled(); + }); + }); + it('handles "Account" button click', async () => { + const useUiStateMockInstance = useUiStateMock(); + (useUiState as jest.Mock).mockReturnValueOnce(useUiStateMockInstance); + const useUserMockInstance = useUserMock({ isAuthenticated: ref(true) }); + (useUser as jest.Mock).mockReturnValueOnce(useUserMockInstance); + + const routerPushMock = jest.fn(); + + const { getByTestId } = render( + BottomNavigation, + { + mocks: { + $router: { + push: routerPushMock, + }, + $route: { + name: 'home', + }, + }, + localVue, + pinia: createTestingPinia(), + }, + ); + + const accountButton = getByTestId('bottom-navigation-account'); + userEvent.click(accountButton); + await waitFor(() => { + expect(routerPushMock).toHaveBeenCalledWith({ name: 'customer' }); + }); + }); + it('handles "Cart" button click', async () => { + const useUiStateMockInstance = useUiStateMock(); + (useUiState as jest.Mock).mockReturnValueOnce(useUiStateMockInstance); + const useUserMockInstance = useUserMock({ isAuthenticated: ref(true) }); + (useUser as jest.Mock).mockReturnValueOnce(useUserMockInstance); + + const { getByTestId } = render( + BottomNavigation, + { + mocks: { + $route: { + name: 'home', + }, + }, + localVue, + pinia: createTestingPinia(), + }, + ); + + const cartButton = getByTestId('bottom-navigation-cart'); + userEvent.click(cartButton); + await waitFor(() => { + expect(useUiStateMockInstance.toggleCartSidebar).toHaveBeenCalled(); + }); + }); +}); diff --git a/components/__tests__/CartSidebar.spec.ts b/components/__tests__/CartSidebar.spec.ts new file mode 100644 index 0000000..e14979c --- /dev/null +++ b/components/__tests__/CartSidebar.spec.ts @@ -0,0 +1,210 @@ +import { render, waitFor, within } from '@testing-library/vue'; +import userEvent from '@testing-library/user-event'; + +import { createLocalVue } from '@vue/test-utils'; +import { PiniaVuePlugin } from 'pinia'; +import { createTestingPinia } from '@pinia/testing'; +import { useUser } from '~/modules/customer/composables/useUser'; +import { useCart, useUiState } from '~/composables'; + +import { + useCartMock, useUserMock, useUiStateMock, useEmptyCartMock, +} from '~/tests/unit/test-utils'; +import CartSidebar from '~/components/CartSidebar.vue'; + +jest.mock('~/composables', () => ({ + ...(jest.requireActual('~/composables') as object), + useExternalCheckout: jest.fn(() => ({ initializeCheckout: jest.fn(() => '/checkout-url') })), + useUiState: jest.fn(), +})); + +jest.mock('~/modules/customer/composables/useUser'); +jest.mock('~/modules/checkout/composables/useCart'); + +(useUser as jest.Mock).mockReturnValue(useUserMock()); +(useCart as jest.Mock).mockReturnValue(useCartMock()); + +const localVue = createLocalVue(); +localVue.use(PiniaVuePlugin); + +describe('CartSidebar', () => { + it('should be not visible by default', () => { + (useUiState as jest.Mock).mockReturnValue(useUiStateMock()); + const { queryByText } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + expect(queryByText('My Cart')).toBeNull(); + }); + + describe('If the cart is empty', () => { + beforeAll(() => { + (useCart as jest.Mock).mockReturnValue(useEmptyCartMock()); + }); + describe('And the cart sidebar is open', () => { + it('renders empty state', () => { + (useUiState as jest.Mock).mockReturnValue(useUiStateMock({ isCartSidebarOpen: true })); + const { queryByText } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + expect(queryByText('Your cart is empty')).toBeTruthy(); + }); + + it('clicking go back button closes the sidebar', async () => { + const uiStateMock = useUiStateMock({ isCartSidebarOpen: true }); + (useUiState as jest.Mock).mockReturnValue(uiStateMock); + const { queryByTestId } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + const closeSidebarBtn = queryByTestId('cart-sidebar-back'); + userEvent.click(closeSidebarBtn); + + await waitFor(() => { + expect(uiStateMock.toggleCartSidebar).toHaveBeenCalledTimes(1); + }); + }); + }); + }); + + describe('If the cart has three products', () => { + beforeAll(() => { + (useCart as jest.Mock).mockReturnValue(useCartMock()); + (useUiState as jest.Mock).mockReturnValue(useUiStateMock({ isCartSidebarOpen: true })); + }); + + it('renders product cards', () => { + const { getAllByTestId } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + expect(getAllByTestId('cart-sidebar-collected-product')).toHaveLength(3); + }); + + it('displays proper item value', async () => { + const useCartMockInstance = useCartMock(); + const { getByTestId } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + const totalValue = getByTestId('cart-sidebar-total'); + const expectedTotal = String(useCartMockInstance.cart.value.prices.grand_total.value); + + await waitFor(() => { + expect(totalValue.textContent).toContain(expectedTotal); + }); + }); + + it('handles navigating to checkout', async () => { + const mockedRouterPush = jest.fn(); + const { getByTestId } = render( + CartSidebar, + { + localVue, + pinia: createTestingPinia(), + mocks: { + $router: { + push: mockedRouterPush, + }, + }, + }, + ); + + const goToCheckoutButton = getByTestId('category-sidebar-go-to-checkout'); + userEvent.click(goToCheckoutButton); + + await waitFor(() => { + expect(mockedRouterPush).toHaveBeenCalledWith('/checkout-url'); + }); + }); + + it('shows configurable options', async () => { + const useCartMockInstance = useCartMock(); + (useCart as jest.Mock).mockReturnValue(useCartMockInstance); + + const { getAllByTestId } = render( + CartSidebar, + { + localVue, + pinia: createTestingPinia(), + }, + ); + + const [{ configurable_options: attributes }] = useCartMockInstance.cart.value.items; + + await waitFor(() => { + const attributeContainer = getAllByTestId('cart-sidebar-attribute-container')[0]; + attributes.forEach( + ({ option_label }) => expect(attributeContainer.textContent).toContain(option_label), + ); + }); + }); + + it('shows products from bundle', async () => { + const useCartMockInstance = useCartMock(); + (useCart as jest.Mock).mockReturnValue(useCartMockInstance); + + const { getByTestId } = render( + CartSidebar, + { + localVue, + pinia: createTestingPinia(), + }, + ); + + const { bundle_options: bundleOptions } = useCartMockInstance.cart.value.items[2]; + + await waitFor(() => { + const bundleContainer = getByTestId('cart-sidebar-bundle-container'); + bundleOptions.forEach( + ({ label }) => expect(bundleContainer.textContent).toContain(label), + ); + }); + }); + + it('increases product quantity', async () => { + const useCartMockInstance = useCartMock(); + (useCart as jest.Mock).mockReturnValue(useCartMockInstance); + + const { getAllByTestId } = render( + CartSidebar, + { + localVue, + pinia: createTestingPinia(), + }, + ); + + const secondProductElement = getAllByTestId('cart-sidebar-collected-product')[1]; + const increaseQuantityButton = within(secondProductElement).getByTestId('increase'); + userEvent.click(increaseQuantityButton); + + await waitFor(() => { + const { uid: uidOfSecondProduct } = useCartMockInstance.cart.value.items[1]; + expect(useCartMockInstance.updateItemQty).toHaveBeenCalledWith({ + product: expect.objectContaining({ uid: uidOfSecondProduct }), + quantity: 2, + }); + }, { timeout: 4500 }); + }); + + it('removes products from cart', async () => { + const useCartMockInstance = useCartMock(); + (useCart as jest.Mock).mockReturnValue(useCartMockInstance); + const { getByTestId, getAllByTestId } = render( + CartSidebar, + { + localVue, + pinia: createTestingPinia(), + }, + ); + userEvent.click(getAllByTestId('collected-product-desktop-remove')[0]); + userEvent.click(getByTestId('cart-sidebar-remove-item-yes')); + await waitFor(() => { + const { uid: uidOfFirstProduct } = useCartMockInstance.cart.value.items[0]; + expect(useCartMockInstance.removeItem).toHaveBeenCalledWith( + { + product: expect.objectContaining({ uid: uidOfFirstProduct }), + }, + ); + }); + }); + + it('renders promo code input', () => { + const { getByTestId } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + getByTestId('promo-code'); + }); + + describe('And exactly one product is out of stock', () => { + it('should display exactly one out of stock badge', () => { + const { getAllByText } = render(CartSidebar, { localVue, pinia: createTestingPinia() }); + expect(getAllByText('Out of stock')).toHaveLength(1); + }); + }); + }); +}); diff --git a/components/__tests__/HTMLContent.spec.ts b/components/__tests__/HTMLContent.spec.ts new file mode 100644 index 0000000..b037f5c --- /dev/null +++ b/components/__tests__/HTMLContent.spec.ts @@ -0,0 +1,6 @@ +import { cmsContentTest } from '~/tests/unit/cmsContent.spec'; +import HTMLContent from '~/components/HTMLContent.vue'; + +describe('HTMLContent.vue', () => { + cmsContentTest(HTMLContent); +}); diff --git a/components/__tests__/ProductAddReviewForm.spec.js b/components/__tests__/ProductAddReviewForm.spec.js new file mode 100644 index 0000000..ba66e14 --- /dev/null +++ b/components/__tests__/ProductAddReviewForm.spec.js @@ -0,0 +1,141 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import { waitFor } from '@testing-library/vue'; +import userEvent from '@testing-library/user-event'; +import { useRoute } from '@nuxtjs/composition-api'; +import { + render, + useUserMock, + useReviewMock, +} from '~/tests/unit/test-utils'; + +import { useReview } from '~/modules/review/composables/useReview'; +import { useUser } from '~/modules/customer/composables/useUser'; +import ProductAddReviewForm from '../../modules/catalog/product/components/ProductAddReviewForm'; + +jest.mock('~/composables', () => { + const originalModule = jest.requireActual('~/composables'); + return { + ...originalModule, + useUser: jest.fn(), + }; +}); + +jest.mock('@nuxtjs/composition-api', () => { + // Require the original module to not be mocked... + const originalModule = jest.requireActual('@nuxtjs/composition-api'); + + return { + ...originalModule, + useRoute: jest.fn(), + }; +}); + +jest.mock('~/modules/review/composables/useReview', () => { + const originalModule = jest.requireActual('~/modules/review/composables/useReview'); + return { + ...originalModule, + useReview: jest.fn(), + }; +}); + +describe.skip('', () => { + it('Form fields are rendered and validated', async () => { + useUser.mockReturnValue(useUserMock()); + useReview.mockReturnValue(useReviewMock()); + useRoute.mockReturnValue({ value: { params: { id: '' } } }); + + const { getByRole, findAllByText, queryByTestId } = render(ProductAddReviewForm); + + // Nickname, title and review fields should be rendered and required + + const recaptchaComponent = queryByTestId('recaptcha'); + expect(recaptchaComponent).toBeNull(); + + const nickname = getByRole('textbox', { name: /name/i }); + expect(nickname).toBeRequired(); + + const summary = getByRole('textbox', { name: /title/i }); + expect(summary).toBeRequired(); + + const text = getByRole('textbox', { name: /review/i }); + expect(text).toBeRequired(); + + const submitButton = getByRole('button', { name: /add review/i }); + userEvent.click(submitButton); + + // should display form errors when field are not filled + const errors = await findAllByText('This field is required'); + expect(errors).toHaveLength(3); + }); + + it('User can submit a review', async () => { + const values = { + nickname: 'nickname value', + rating: '2', + sku: 'sku value', + summary: 'summary value', + text: 'text value', + token: 'token value', + }; + + useRoute.mockReturnValue({ value: { params: { id: values.sku } } }); + useUser.mockReturnValue(useUserMock()); + useReview.mockReturnValue(useReviewMock({ + metadata: { + value: [{ + id: 'rating', + name: 'Product rating', + values: [ + { value_id: '1', value: 'Rating 1' }, + { value_id: '2', value: 'Rating 2' }, + { value_id: '3', value: 'Rating 3' }, + ], + }], + }, + })); + + const { getByRole, emitted, queryByTestId } = render(ProductAddReviewForm, { + mocks: { + $nuxt: { + context: { + $config: { isRecaptcha: true }, + $recaptcha: { + init: jest.fn(), + getResponse: jest.fn().mockResolvedValue(Promise.resolve(values.token)), + }, + }, + }, + }, + }); + + const recaptchaComponent = queryByTestId('recaptcha'); + expect(recaptchaComponent).toBeTruthy(); + + const nickname = getByRole('textbox', { name: /name/i }); + const summary = getByRole('textbox', { name: /title/i }); + const text = getByRole('textbox', { name: /review/i }); + const rating = getByRole('combobox', { name: /product rating/i }); + const submitButton = getByRole('button', { name: /add review/i }); + + // fill the form + userEvent.type(nickname, values.nickname); + userEvent.type(summary, values.summary); + userEvent.selectOptions(rating, values.rating); + userEvent.type(text, values.text); + + // Submit the form + userEvent.click(submitButton); + + await waitFor(() => { + expect(emitted()).toHaveProperty('add-review'); + expect(emitted()['add-review'][0][0]).toEqual({ + nickname: values.nickname, + ratings: [{ id: 'rating', value_id: values.rating }], + sku: values.sku, + summary: values.summary, + text: values.text, + recaptchaToken: values.token, + }); + }); + }); +}); diff --git a/components/directives/click-outside/click-outside-directive.ts b/components/directives/click-outside/click-outside-directive.ts new file mode 100644 index 0000000..28c88ad --- /dev/null +++ b/components/directives/click-outside/click-outside-directive.ts @@ -0,0 +1,26 @@ +/* eslint-disable no-underscore-dangle */ +/* eslint-disable no-param-reassign */ + +import { DirectiveOptions } from 'vue'; + +type ElementWithClickOutsideListener = HTMLElement & { _outsideClickHandler: (e: MouseEvent) => void }; +export const clickOutside : DirectiveOptions = { + bind(el: ElementWithClickOutsideListener, binding) { + const closeHandler = binding.value; + + el._outsideClickHandler = (event: MouseEvent) => { + if (!el.contains(event.target as Node)) { + event.stopPropagation(); + closeHandler(event, el); + } + }; + + document.addEventListener('mousedown', el._outsideClickHandler); + document.addEventListener('touchstart', el._outsideClickHandler); + }, + unbind(el: ElementWithClickOutsideListener) { + document.removeEventListener('mousedown', el._outsideClickHandler); + document.removeEventListener('touchstart', el._outsideClickHandler); + el._outsideClickHandler = null; + }, +}; diff --git a/components/utils/LoadWhenVisible.vue b/components/utils/LoadWhenVisible.vue new file mode 100644 index 0000000..a941e33 --- /dev/null +++ b/components/utils/LoadWhenVisible.vue @@ -0,0 +1,53 @@ + + diff --git a/composables/context.ts b/composables/context.ts new file mode 100644 index 0000000..747cbc3 --- /dev/null +++ b/composables/context.ts @@ -0,0 +1,16 @@ +import type { AxiosInstance } from 'axios'; +import type { Config, MagentoApiMethods } from '@vue-storefront/magento-api'; +import type { ApiClientMethods, IntegrationContext } from '~/types/core'; + +export interface VsfContext { + $magento: IntegrationContext>; +} + +declare module '@nuxt/types' { + interface NuxtAppOptions { + $vsf: VsfContext + } + interface Context { + $vsf: VsfContext + } +} diff --git a/composables/index.ts b/composables/index.ts index 0ad4cb1..e8b1811 100644 --- a/composables/index.ts +++ b/composables/index.ts @@ -1,9 +1,48 @@ -import useUiHelpers from './useUiHelpers'; -import useUiState from './useUiState'; -import useUiNotification from './useUiNotification'; +/** + * Composables, getters, helpers and components for Magento 2 integration for Vue Storefront 2. + * + * @remarks + * This package includes all things tou need to develop own Magento 2 shop + * + * @packageDocumentation + */ +export * from './useApi'; +export * from '../modules/customer/composables/useAddresses'; +export * from '../modules/checkout/composables/useBilling'; +export * from '../modules/checkout/composables/useCart'; +export * from '../modules/catalog/category/composables/useCategory'; +export * from '../modules/catalog/category/composables/useCategorySearch'; +export * from './useConfig'; +export * from './useContent'; +export * from './useCountrySearch'; +export * from './useCurrency'; +export * from './useExternalCheckout'; +export * from '../modules/catalog/category/composables/useFacet'; +export * from '../modules/customer/composables/useForgotPassword'; +export * from '../modules/checkout/composables/useGetShippingMethods'; +export * from '../modules/customer/composables/useGuestUser'; +export * from './useImage'; +export * from './useMagentoConfiguration'; +export * from '../modules/checkout/composables/useMakeOrder'; +export * from './useNewsletter'; +export * from '../modules/checkout/composables/usePaymentProvider'; +export * from '../modules/catalog/product/composables/useProduct'; +export * from '../modules/catalog/product/composables/useRelatedProducts'; +export * from '../modules/review/composables/useReview'; +export * from '../modules/checkout/composables/useShipping'; +export * from '../modules/checkout/composables/useShippingProvider'; +export * from './useStore'; +export * from './useUiHelpers'; +export * from './useUiNotification'; +export * from './useUiState'; +export * from '../modules/catalog/product/composables/useUpsellProducts'; +export * from './useUrlResolver'; +export * from '../modules/customer/composables/useUser'; +export * from '../modules/customer/composables/useUserAddress'; +export * from '../modules/customer/composables/useUserOrder'; +export * from '../modules/wishlist/composables/useWishlist'; +export * from './useMagentoConfiguration'; +export * from '../modules/checkout/composables/useCartView'; -export { - useUiHelpers, - useUiState, - useUiNotification, -}; +export * from './types'; +export * from '../modules/GraphQL/types'; diff --git a/composables/types.ts b/composables/types.ts new file mode 100644 index 0000000..8872a95 --- /dev/null +++ b/composables/types.ts @@ -0,0 +1,29 @@ +import type { + AvailableStoresQuery, + CountriesListQuery, +} from '~/modules/GraphQL/types'; + +import type { CustomQuery, CustomHeaders } from '~/types/core'; + +export declare type AvailableStores = AvailableStoresQuery['availableStores']; +export declare type Countries = CountriesListQuery['countries'][0]; + +export declare type ComposableFunctionArgs = T & { + customQuery?: CustomQuery; + customHeaders?: CustomHeaders; +}; + +export interface Totals { + total: number; + subtotal: number; + special?: number; + [x: string]: unknown; +} + +export interface Pagination { + currentPage?: number; + totalPages?: number; + totalItems?: number; + itemsPerPage?: number; + pageOptions?: number[]; +} diff --git a/composables/useApi/index.ts b/composables/useApi/index.ts new file mode 100644 index 0000000..9ad8878 --- /dev/null +++ b/composables/useApi/index.ts @@ -0,0 +1,114 @@ +import { useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; + +export type FetchPolicy = 'cache-first' | 'network-only' | 'cache-only' | 'no-cache' | 'standby'; + +export type Variables = { + [key: string]: any; +}; + +export type Error = { + message: string; + locations?: { + line: number; + column: number; + }[]; + path?: string[]; + extensions?: any; +}; + +export type Request = ( + request: string, + variables?: VARIABLES, + fetchPolicy?: FetchPolicy, +) => Promise<{ data: DATA, errors: Error[] }>; + +/** + * Data and methods returned from the {@link useApi|useApi()} composable. + */ +export interface UseApiInterface { + /** + * Executes received GraphQL query with optional variables and headers and + * returns the result. + * + * @example + * + * Execute a GraphQL query and handle its error, loading and result: + * + * ```ts + * import { useApi } from '~/composables/useApi'; + * + * const GET_CART_PRICE_QUERY = ` + * query GET_CART_PRICE_QUERY($cartId: String!) { + * cart(cart_id: $cartId) { + * prices { + * subtotal_excluding_tax { + * value + * } + * } + * } + * } + * `; + * + * export default { + * setup() { + * const { query } = useApi(); + * + * async function getCartPrice(cartId: string) { + * return await query( + * GET_CART_PRICE_QUERY, + * { cartId }, + * { 'Accept': 'application/json' } + * ); + * } + * } + * }; + * ``` + */ + query: Request; + + /** + * Executes received GraphQL Mutation with optional variables and headers and + * returns the result. + */ + mutate: Request; +} + +/** + * Allows executing arbitrary GraphQL queries and mutations. + * + * See the {@link UseApiInterface} for a list of methods and values available in this composable. + */ +export function useApi(): UseApiInterface { + const context = useContext(); + + // @ts-ignore + const query: Request = async ( + request, + variables, + ) => { + const reqID = `id${Math.random().toString(16).slice(2)}`; + Logger.debug(`customQuery/request/${reqID}`, request); + const { data, errors } = await context.app.$vsf.$magento.api.customQuery({ query: request, queryVariables: variables }); + Logger.debug(`customQuery/result/${reqID}`, { data, errors }); + + return { data, errors }; + }; + + // @ts-ignore + const mutate: Request = async ( + request, + variables, + ) => { + const reqID = `id${Math.random().toString(16).slice(2)}`; + Logger.debug(`customQuery/request/${reqID}`, request); + const { data, errors } = await context.app.$vsf.$magento.api.customMutation({ mutation: request, mutationVariables: variables }); + Logger.debug(`customQuery/result/${reqID}`, { data, errors }); + + return { data, errors }; + }; + + return { query, mutate }; +} + +export default useApi; diff --git a/composables/useConfig/index.ts b/composables/useConfig/index.ts new file mode 100644 index 0000000..f63ccc7 --- /dev/null +++ b/composables/useConfig/index.ts @@ -0,0 +1,47 @@ +import { + computed, readonly, ref, useContext, +} from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { useConfigStore } from '~/stores/config'; +import type { UseConfigErrors, UseConfigInterface, UseConfigLoadParams } from './useConfig'; + +/** + * Allows interacting with the store configuration. + * + * See the {@link UseConfigInterface} for a list of methods and values available in this composable. + */ +export function useConfig(): UseConfigInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref({ load: null }); + const configStore = useConfigStore(); + const config = computed(() => configStore.storeConfig); + + const load = async (params?: UseConfigLoadParams) => { + error.value.load = null; + loading.value = true; + + Logger.debug('useConfig/load'); + + try { + const { data } = await app.$vsf.$magento.api.storeConfig(params?.customQuery ?? null, params?.customHeaders); + configStore.$patch((state) => { + state.storeConfig = data.storeConfig || {}; + }); + } catch (err) { + Logger.debug('[ERROR] useConfig/load', err); + error.value.load = err; + } finally { + loading.value = false; + } + }; + + return { + config, + loading: readonly(loading), + load, + }; +} + +export * from './useConfig'; +export default useConfig; diff --git a/composables/useConfig/useConfig.ts b/composables/useConfig/useConfig.ts new file mode 100644 index 0000000..5e45d91 --- /dev/null +++ b/composables/useConfig/useConfig.ts @@ -0,0 +1,38 @@ +import { ComputedRef, DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import { StoreConfig } from '~/modules/GraphQL/types'; +import { ComposableFunctionArgs } from '~/composables'; + +/** + * Errors that occured in the {@link useConfig|useConfig()} composable + */ +export interface UseConfigErrors { + /** + * Contains error if `load` method failed, otherwise is `null` + */ + load: Error | null; +} + +/** + * The params object accepted by the `load` method in the {@link useConfig|useConfig()} composable + */ +export type UseConfigLoadParams = ComposableFunctionArgs<{}>; + +/** + * Data and methods returned from the {@link useConfig|useConfig()} composable + */ +export interface UseConfigInterface { + /** + * Store configuration loaded using the `load` method + */ + config: ComputedRef, + + /** + * Indicates whether any of the methods is in progress + */ + loading: DeepReadonly>, + + /** + * Loads store configuration + */ + load(): Promise +} diff --git a/composables/useContent/commands/loadBlocksCommand.ts b/composables/useContent/commands/loadBlocksCommand.ts new file mode 100644 index 0000000..dd54039 --- /dev/null +++ b/composables/useContent/commands/loadBlocksCommand.ts @@ -0,0 +1,14 @@ +import { Logger } from '~/helpers/logger'; +import { VsfContext } from '~/composables/context'; + +export const loadBlocksCommand = { + execute: async (context: VsfContext, params) => { + Logger.debug('[Magento]: Load CMS Blocks content', { params }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const { data } = await context.$magento.api.cmsBlocks(params.identifiers, params.customQuery ?? null, params?.customHeaders); + + Logger.debug('[Result]:', { data }); + + return data.cmsBlocks.items; + }, +}; diff --git a/composables/useContent/commands/loadContentCommand.ts b/composables/useContent/commands/loadContentCommand.ts new file mode 100644 index 0000000..4d6d59d --- /dev/null +++ b/composables/useContent/commands/loadContentCommand.ts @@ -0,0 +1,14 @@ +import { Logger } from '~/helpers/logger'; +import { VsfContext } from '~/composables/context'; + +export const loadContentCommand = { + execute: async (context: VsfContext, params) => { + Logger.debug('[Magento]: Load CMS Page content', { params }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const { data } = await context.$magento.api.cmsPage(params.identifier, params.customQuery ?? null, params?.customHeaders); + + Logger.debug('[Result]:', { data }); + + return data.cmsPage; + }, +}; diff --git a/composables/useContent/index.ts b/composables/useContent/index.ts new file mode 100644 index 0000000..9767431 --- /dev/null +++ b/composables/useContent/index.ts @@ -0,0 +1,67 @@ +import { ref, readonly, useContext } from '@nuxtjs/composition-api'; +import type { Ref } from '@nuxtjs/composition-api'; +import type { CmsPage, CmsBlock } from '~/modules/GraphQL/types'; +import { Logger } from '~/helpers/logger'; +import { loadContentCommand } from './commands/loadContentCommand'; +import { loadBlocksCommand } from './commands/loadBlocksCommand'; +import type { ComposableFunctionArgs } from '../types'; +import type { UseContentInterface, UseContentErrors } from './useContent'; + +/** + * Allows loading CMS Pages or Blocks from Magento API. + * + * See the {@link UseContentInterface} for a list of methods and values available in this composable. + */ +export function useContent(): UseContentInterface { + const loading: Ref = ref(false); + const error: Ref = ref({ + page: null, + blocks: null, + }); + const { app } = useContext(); + const context = app.$vsf; + + async function loadPage(params: ComposableFunctionArgs<{ identifier: string }>): Promise { + Logger.debug('useContent/loadPage'); + loading.value = true; + let result = null; + + try { + error.value.page = null; + result = await loadContentCommand.execute(context, params); + } catch (err) { + error.value.page = err; + } finally { + loading.value = false; + } + + return result; + } + + async function loadBlocks(params: ComposableFunctionArgs<{ identifiers: string[] }>): Promise { + Logger.debug('useContent/loadBlocks'); + loading.value = true; + let result = []; + + try { + error.value.blocks = null; + result = await loadBlocksCommand.execute(context, params); + } catch (err) { + error.value.blocks = err; + } finally { + loading.value = false; + } + + return result; + } + + return { + error: readonly(error), + loading: readonly(loading), + loadPage, + loadBlocks, + }; +} + +export default useContent; +export * from './useContent'; diff --git a/composables/useContent/useContent.ts b/composables/useContent/useContent.ts new file mode 100644 index 0000000..fc1e667 --- /dev/null +++ b/composables/useContent/useContent.ts @@ -0,0 +1,101 @@ +import type { Ref } from '@nuxtjs/composition-api'; +import type { CmsPage, CmsBlock } from '~/modules/GraphQL/types'; +import type { ComposableFunctionArgs } from '../types'; + +/** + * Errors that occured in the {@link useContent|useContent()} composable + */ +export interface UseContentErrors { + /** + * Contains error if `loadPage` method failed, otherwise is `null` + */ + page: Error | null; + + /** + * Contains error if `loadBlocks` method failed, otherwise is `null` + */ + blocks: Error | null; +} + +/** + * Data and methods returned from the {@link useContent|useContent()} composable + */ +export interface UseContentInterface { + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; + + /** + * Contains errors from the composable methods + */ + error: Readonly>; + + /** + * Loads CMS page + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#cmsPage} API endpoint + * and accepts custom query named `cmsPage`. + * + * @example + * + * Load CMS Page using the useFetch hook: + * + * ```typescript + * import { useFetch, ref } from '@nuxtjs/composition-api'; + * import { useContent } from '~/composables'; + * + * export default { + * setup() { + * const { loading, error, loadPage } = useContent(); + * + * const page = ref({}); + * const pageId = 'about-us' + * + * useFetch(async () => { + * page.value = await loadPage({ identifier: pageId }); + * + * if (error?.value?.page || !page.value) { + * // Handle error + * } + * }); + * } + * } + * ``` + */ + loadPage(params: ComposableFunctionArgs<{ identifier: string }>): Promise; + + /** + * Loads CMS block + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#cmsBlocks} API endpoint + * and accepts custom query named `cmsBlocks`. + * + * @example + * + * Load CMS Block using the useFetch hook: + * + * ```typescript + * import { useFetch, ref } from '@nuxtjs/composition-api'; + * import { useContent } from '~/composables'; + * + * export default { + * setup(props) { + * const { loadBlocks } = useContent(); + * const blocks = ref([]); + * + * useFetch(async () => { + * if (props.identifiers) { + * blocks.value = await loadBlocks(['block-a', 'block-b`]); + * } + * }); + * } + * } + * ``` + */ + loadBlocks(params: ComposableFunctionArgs<{ identifiers: string[] }>): Promise; +} diff --git a/composables/useCountrySearch/index.ts b/composables/useCountrySearch/index.ts new file mode 100644 index 0000000..216abc5 --- /dev/null +++ b/composables/useCountrySearch/index.ts @@ -0,0 +1,77 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { ComposableFunctionArgs, Countries } from '~/composables/types'; +import { Maybe, Country } from '~/modules/GraphQL/types'; +import { UseCountrySearchInterface } from './useCountrySearch'; + +/** + * Allows fetching a list of countries or a single country by ID + * + * See the {@link UseCountrySearchInterface} for a list of methods and values available in this composable. + */ +export function useCountrySearch(): UseCountrySearchInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref({ + search: null, + load: null, + }); + + const search = async (params: ComposableFunctionArgs<{ id: string }>): Promise> => { + let results = null; + + try { + loading.value = true; + + Logger.debug('[Magento]: Search country information based on', { params }); + + const { data } = await app.$vsf.$magento.api.country(params.id, params?.customQuery ?? null, params?.customHeaders ?? null); + + Logger.debug('[Result]:', { data }); + + results = data?.country ?? null; + error.value.search = null; + } catch (err) { + error.value.search = err; + Logger.error('useCountrySearch/search', err); + } finally { + loading.value = false; + } + + return results; + }; + + const load = async (): Promise> => { + let results = []; + + try { + loading.value = true; + + Logger.debug('[Magento]: Load available countries on store'); + + const { data } = await app.$vsf.$magento.api.countries(); + + Logger.debug('[Result]:', { data }); + + results = data?.countries ?? []; + error.value.search = null; + } catch (err) { + error.value.search = err; + Logger.error('useCountrySearch/load', err); + } finally { + loading.value = false; + } + + return results; + }; + + return { + load, + search, + loading: readonly(loading), + error: readonly(error), + }; +} + +export * from './useCountrySearch'; +export default useCountrySearch; diff --git a/composables/useCountrySearch/useCountrySearch.ts b/composables/useCountrySearch/useCountrySearch.ts new file mode 100644 index 0000000..3583b04 --- /dev/null +++ b/composables/useCountrySearch/useCountrySearch.ts @@ -0,0 +1,60 @@ +import { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import { Countries, ComposableFunctionArgs } from '~/composables/types'; +import { Maybe, Country } from '~/modules/GraphQL/types'; + +/** + * Errors that occured in the {@link useCountrySearch|useCountrySearch()} composable + */ +export interface UseCountrySearchErrors { + /** + * Contains error if `search` method failed, otherwise is `null` + */ + search: Error | null + + /** + * Contains error if `load` method failed, otherwise is `null` + */ + load: Error | null +} + +/** + * The params object accepted by the `save`, `update` and `remove` methods in the {@link useCountrySearch|useCountrySearch()} composable + */ +export type UseCountrySearchParams = ComposableFunctionArgs<{ + id: string; +}>; + +/** + * Data and methods returned from the {@link useCountrySearch|useCountrySearch()} composable + */ +export interface UseCountrySearchInterface { + /** + * Fetches the array of registered countries + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#country} API endpoint + * and accepts the custom queries named `country`. + */ + load(): Promise>; + + /** + * Fetches a country by its id + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#countries} API endpoint + * and accepts the custom queries named `countries`. + */ + search(params: UseCountrySearchParams): Promise>; + + /** + * Indicates whether any of the methods is in progress + */ + loading: DeepReadonly>; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; +} diff --git a/composables/useCurrency/__tests__/useCurrency.spec.ts b/composables/useCurrency/__tests__/useCurrency.spec.ts new file mode 100644 index 0000000..3d45299 --- /dev/null +++ b/composables/useCurrency/__tests__/useCurrency.spec.ts @@ -0,0 +1,66 @@ +import { defineComponent, onMounted, useContext } from '@nuxtjs/composition-api'; +import { createLocalVue } from '@vue/test-utils'; +import { PiniaVuePlugin, setActivePinia, createPinia } from 'pinia'; +import { createTestingPinia } from '@pinia/testing'; +import { render } from '@testing-library/vue'; +import { useCurrency } from '../index'; + +const localVue = createLocalVue(); +localVue.use(PiniaVuePlugin); +const pinia = createTestingPinia(); +const appMock = { + app: { + $vsf: { + $magento: { + api: { + currency: jest.fn(), + }, + }, + }, + }, +}; + +jest.mock('@nuxtjs/composition-api', () => { + const actual = jest.requireActual('@nuxtjs/composition-api'); + return { + ...actual, + useContext: jest.fn(), + }; +}); + +describe('useCurrency', () => { + beforeEach(() => { + setActivePinia(createPinia()); + }); + + const MockComponent = defineComponent({ + name: 'MockComponent', + setup() { + const { load } = useCurrency(); + + onMounted(async () => { + await load({ + customQuery: { + currency: 'custom-currency-query', + }, + }); + }); + }, + template: '
mock
', + }); + + it('the load method should receive custom query', () => { + // given + (useContext as jest.Mock).mockReturnValue(appMock); + + // when + render(MockComponent, { + localVue, + pinia, + }); + + // then + expect(appMock.app.$vsf.$magento.api.currency) + .toHaveBeenCalledWith({ currency: 'custom-currency-query' }, null); + }); +}); diff --git a/composables/useCurrency/index.ts b/composables/useCurrency/index.ts new file mode 100644 index 0000000..aeabdd7 --- /dev/null +++ b/composables/useCurrency/index.ts @@ -0,0 +1,71 @@ +import { + ref, + computed, + readonly, + useContext, +} from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { useConfigStore } from '~/stores/config'; +import type { + UseCurrencyErrors, + UseCurrencyInterface, + UseCurrencyLoadParams, + UseCurrencyChangeParams, +} from './useCurrency'; + +/** + * Allows loading and changing the currency. + * + * See the {@link UseCurrencyInterface} for a list of methods and values available in this composable. + */ +export function useCurrency(): UseCurrencyInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref({ load: null, change: null }); + const configStore = useConfigStore(); + const currency = computed(() => configStore.currency); + + const load = async (params?: UseCurrencyLoadParams) => { + error.value.load = null; + loading.value = true; + + Logger.debug('useCurrency/load'); + + try { + const { data } = await app.$vsf.$magento.api.currency(params?.customQuery ?? null, params?.customHeaders ?? null); + configStore.$patch((state) => { + state.currency = data?.currency ?? {}; + }); + } catch (err) { + Logger.debug('[ERROR] useCurrency/load', err); + error.value.load = err; + } finally { + loading.value = false; + } + }; + + const change = (params: UseCurrencyChangeParams) => { + error.value.change = null; + Logger.debug('useCurrency/change'); + + try { + app.$vsf.$magento.config.state.setCurrency(params.id); + window.location.reload(); + } catch (err) { + Logger.debug('[ERROR] useCurrency/change', err); + error.value.change = err; + } + }; + + return { + load, + change, + currency, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './useCurrency'; + +export default useCurrency; diff --git a/composables/useCurrency/useCurrency.ts b/composables/useCurrency/useCurrency.ts new file mode 100644 index 0000000..9b7d738 --- /dev/null +++ b/composables/useCurrency/useCurrency.ts @@ -0,0 +1,65 @@ +import type { ComputedRef, DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { Currency } from '~/modules/GraphQL/types'; + +/** + * Errors that occured in the {@link useCurrency|useCurrency()} composable + */ +export interface UseCurrencyErrors { + /** + * Contains error if `load` method failed, otherwise is `null` + */ + load: Error | null; + + /** + * Contains error if `change` method failed, otherwise is `null` + */ + change: Error | null; +} + +/** + * The params object accepted by the `load` method in the {@link useCurrency|useCurrency()} composable + */ +export type UseCurrencyLoadParams = ComposableFunctionArgs<{}>; + +/** + * The params object accepted by the `change` method in the {@link useCurrency|useCurrency()} composable + */ +export type UseCurrencyChangeParams = { id: string }; + +/** + * Data and methods returned from the {@link useCurrency|useCurrency()} composable + */ +export interface UseCurrencyInterface { + /** + * Loads the currency and updates the configuration store + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#currency} API endpoint + * and accepts the custom queries named `currency`. + */ + load(params?: UseCurrencyLoadParams): Promise; + + /** + * Changes the currency and reloads the page + */ + change(params: UseCurrencyChangeParams): void; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; + + /** + * The currency information object that contains its symbol, code and how it + * should be displayed. It's a computed ref from currency state in the + * configuration store. + */ + currency: ComputedRef; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; +} diff --git a/composables/useExternalCheckout/index.ts b/composables/useExternalCheckout/index.ts new file mode 100644 index 0000000..7739c3c --- /dev/null +++ b/composables/useExternalCheckout/index.ts @@ -0,0 +1,54 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import type { UseExternalCheckoutInterface } from '~/composables/useExternalCheckout/useExternalCheckout'; + +/** + * Allows redirecting to external checkout process. It depends on the {@link https://github.com/Vendic/magento2-external-checkout | magento2-external-checkout repository}. + * + * See the {@link UseExternalCheckoutInterface} for a list of methods and values available in this composable. + */ +export function useExternalCheckout(): UseExternalCheckoutInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref(null); + + // eslint-disable-next-line consistent-return + const initializeCheckout = (params) => { + Logger.debug('[Magento]: Initialize external checkout', { params }); + + try { + const { externalCheckout, state } = app.context.$vsf.$magento.config; + const userToken = state.getCustomerToken(); + const cartToken = state.getCartId(); + + Logger.debug({ userToken, cartToken }); + loading.value = true; + + if (externalCheckout.enable) { + if (userToken && cartToken) { + 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; + } catch (err) { + error.value = err; + Logger.error(err); + } finally { + loading.value = false; + } + }; + + return { + initializeCheckout, + loading: readonly(loading), + error: readonly(error), + }; +} + +export * from './useExternalCheckout'; +export default useExternalCheckout; diff --git a/composables/useExternalCheckout/useExternalCheckout.ts b/composables/useExternalCheckout/useExternalCheckout.ts new file mode 100644 index 0000000..14ffc87 --- /dev/null +++ b/composables/useExternalCheckout/useExternalCheckout.ts @@ -0,0 +1,27 @@ +import { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import { ComposableFunctionArgs } from '~/composables/types'; + +/** + * The params object accepted by the `initializeCheckout` method in the {@link useExternalCheckout|useExternalCheckout()} composable + */ +export type UseExternalCheckoutInitializeParams = ComposableFunctionArgs<{ baseUrl: string }>; + +/** + * Data and methods returned from the {@link useExternalCheckout|useExternalCheckout()} composable + */ +export interface UseExternalCheckoutInterface { + /** + * Initializes the checkout provider with the `baseUrl` + */ + initializeCheckout(params: UseExternalCheckoutInitializeParams): string + + /** + * Indicates whether any of the methods is in progress + */ + loading: DeepReadonly>, + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>, +} diff --git a/composables/useImage/__tests__/useImage.spec.js b/composables/useImage/__tests__/useImage.spec.js new file mode 100644 index 0000000..96a9038 --- /dev/null +++ b/composables/useImage/__tests__/useImage.spec.js @@ -0,0 +1,45 @@ +import { useContext } from '@nuxtjs/composition-api'; +import { useImage } from '../index'; + +jest.mock('@nuxtjs/composition-api', () => ({ + useContext: jest.fn(), +})); + +describe('useImage composable', () => { + const testURL = 'https://mymagento.dev/media/image.png'; + + it('return given URL without modifications if custom image provider is not set', () => { + useContext.mockReturnValue({ + $vsf: { + $magento: { + config: { + imageProvider: 'ipx', + }, + }, + }, + }); + + const { getMagentoImage } = useImage(); + const image = getMagentoImage(testURL); + + expect(image).toEqual(image); + }); + + it('return modified URL when custom image provider is set', () => { + useContext.mockReturnValue({ + $vsf: { + $magento: { + config: { + imageProvider: 'cloudinary', + magentoBaseUrl: 'https://mymagento.dev/', + }, + }, + }, + }); + + const { getMagentoImage } = useImage(); + const image = getMagentoImage(testURL); + + expect(image).toEqual('media/image.png'); + }); +}); diff --git a/composables/useImage/index.ts b/composables/useImage/index.ts new file mode 100644 index 0000000..aabd749 --- /dev/null +++ b/composables/useImage/index.ts @@ -0,0 +1,66 @@ +import { useContext } from '@nuxtjs/composition-api'; +import { UseImageInterface } from './useImage'; + +const imageSizes = { + productCard: { + width: 216, + height: 268, + }, + productCardHorizontal: { + width: 140, + height: 200, + }, + checkout: { + imageWidth: 100, + imageHeight: 100, + }, + productGallery: { + thumbWidth: 160, + thumbHeight: 160, + imageWidth: 1080, + imageHeight: 1340, + }, + cart: { + imageWidth: 170, + imageHeight: 170, + }, +}; + +/** + * Allows extracting image paths from magento URL. + * + * See the {@link UseImageInterface} for a list of methods and values available in this composable. + * */ +export function useImage(): UseImageInterface { + const context = useContext(); + /** + * Extract image path from Magento URL. + * + * @param fullImageUrl {string | null} + * + * @return {string} + */ + const getMagentoImage = (fullImageUrl: string | null) => { + if (!fullImageUrl) return ''; + + // @ts-ignore + const { imageProvider, magentoBaseUrl } = context.$vsf.$magento.config; + + if (imageProvider !== 'ipx') { + const url = fullImageUrl.split(`${magentoBaseUrl}`); + + const regex = /cache\/(.*?)\//gm; + return url[1].replace(regex, ''); + } + + return fullImageUrl; + }; + + return { + getMagentoImage, + imageSizes, + }; +} + +export * from './useImage'; +export default useImage; diff --git a/composables/useImage/useImage.ts b/composables/useImage/useImage.ts new file mode 100644 index 0000000..e8537d1 --- /dev/null +++ b/composables/useImage/useImage.ts @@ -0,0 +1,39 @@ +export type ImageSizes = { + productCard: { + width: number, + height: number, + }, + productCardHorizontal: { + width: number, + height: number, + }, + checkout: { + imageWidth: number, + imageHeight: number, + }, + productGallery: { + thumbWidth: number, + thumbHeight: number, + imageWidth: number, + imageHeight: number, + }, + cart: { + imageWidth: number, + imageHeight: number, + }, +}; + +/** + * Data and methods returned from the {@link useImage|useImage()} composable + */ +export interface UseImageInterface { + /** + * Extracts image path from Magento URL. + */ + getMagentoImage(fullImageUrl: string): string + + /** + * Available image sizes + */ + imageSizes: ImageSizes +} diff --git a/composables/useMagentoConfiguration/UseMagentoConfiguration.ts b/composables/useMagentoConfiguration/UseMagentoConfiguration.ts new file mode 100644 index 0000000..efb5ce3 --- /dev/null +++ b/composables/useMagentoConfiguration/UseMagentoConfiguration.ts @@ -0,0 +1,27 @@ +import type { ComputedRef } from '@nuxtjs/composition-api'; +import type { StoreConfig } from '~/modules/GraphQL/types'; + +/** + * Data and methods returned from the {@link useMagentoConfiguration|useMagentoConfiguration()} composable + */ +export interface UseMagentoConfigurationInterface { + /** + * Store configuration object. + */ + storeConfig: ComputedRef; + + /** + * Currently active currency + */ + selectedCurrency: ComputedRef; + + /** + * Currently active locale + */ + selectedLocale: ComputedRef; + + /** + * Currently active store + */ + selectedStore: ComputedRef; +} diff --git a/composables/useMagentoConfiguration/index.ts b/composables/useMagentoConfiguration/index.ts new file mode 100644 index 0000000..7730a14 --- /dev/null +++ b/composables/useMagentoConfiguration/index.ts @@ -0,0 +1,35 @@ +import { computed, useContext } from '@nuxtjs/composition-api'; +import { useConfig } from '~/composables'; +import type { UseMagentoConfigurationInterface } from './UseMagentoConfiguration'; + +/** + * Allows getting the Magento's major + * definitions, e.g., the selected currency, store, locale, and config object. + * + * See the {@link UseMagentoConfigurationInterface} for a list of methods and values available in this composable. + */ +export function useMagentoConfiguration(): UseMagentoConfigurationInterface { + const { + app: { + $vsf: { + $magento: { config }, + }, + }, + } = useContext(); + + const { config: storeConfig } = useConfig(); + + const selectedCurrency = computed(() => config.state.getCurrency()); + const selectedLocale = computed(() => config.state.getLocale()); + const selectedStore = computed(() => config.state.getStore()); + + return { + storeConfig, + selectedCurrency, + selectedLocale, + selectedStore, + }; +} + +export * from './UseMagentoConfiguration'; +export default useMagentoConfiguration; diff --git a/composables/useNewsletter/commands/updateSubscriptionCommand.ts b/composables/useNewsletter/commands/updateSubscriptionCommand.ts new file mode 100644 index 0000000..903846c --- /dev/null +++ b/composables/useNewsletter/commands/updateSubscriptionCommand.ts @@ -0,0 +1,13 @@ +import { UseContextReturn } from '~/types/core'; +import type { SubscriptionStatusesEnum } from '~/modules/GraphQL/types'; +import type { UseNewsletterUpdateSubscriptionParams } from '~/composables'; + +export const updateSubscriptionCommand = { + execute: async (context: UseContextReturn, params: UseNewsletterUpdateSubscriptionParams): Promise => { + const { data } = await context.app.$vsf.$magento.api.subscribeEmailToNewsletter({ + email: params.email, + }, params?.customQuery ?? null, params?.customHeaders ?? null); + + return data?.subscribeEmailToNewsletter?.status ?? null; + }, +}; diff --git a/composables/useNewsletter/index.ts b/composables/useNewsletter/index.ts new file mode 100644 index 0000000..bd3b699 --- /dev/null +++ b/composables/useNewsletter/index.ts @@ -0,0 +1,51 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { SubscriptionStatusesEnum } from '~/modules/GraphQL/types'; +import { updateSubscriptionCommand } from './commands/updateSubscriptionCommand'; +import type { + UseNewsletterErrors, + UseNewsletterInterface, + UseNewsletterUpdateSubscriptionParams, +} from './useNewsletter'; + +/** + * Allows updating the subscription status of + * an email in the newsletter. + * + * See the {@link UseNewsletterInterface} for a list of methods and values available in this composable. + */ +export function useNewsletter(): UseNewsletterInterface { + const context = useContext(); + const loading = ref(false); + const error = ref({ + updateSubscription: null, + }); + + const updateSubscription = async (params: UseNewsletterUpdateSubscriptionParams) => { + Logger.debug('[Magento]: Update user newsletter subscription', { params }); + let result = SubscriptionStatusesEnum.Unsubscribed; + + try { + loading.value = true; + error.value.updateSubscription = null; + + result = await updateSubscriptionCommand.execute(context, params); + } catch (err) { + error.value.updateSubscription = err; + Logger.error('useNewsletter/updateSubscription', err); + } finally { + loading.value = false; + } + + return result; + }; + + return { + updateSubscription, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './useNewsletter'; +export default useNewsletter; diff --git a/composables/useNewsletter/useNewsletter.ts b/composables/useNewsletter/useNewsletter.ts new file mode 100644 index 0000000..7e1d704 --- /dev/null +++ b/composables/useNewsletter/useNewsletter.ts @@ -0,0 +1,40 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { SubscriptionStatusesEnum } from '~/modules/GraphQL/types'; + +/** + * Errors that occured in the {@link useNewsletter|useNewsletter()} composable + */ +export interface UseNewsletterErrors { + /** + * Contains error if `updateSubscription` method failed, otherwise is `null` + */ + updateSubscription: Error | null; +} + +/** + * The params object accepted by the `updateSubscription` method in the {@link useNewsletter|useNewsletter()} composable + */ +export type UseNewsletterUpdateSubscriptionParams = ComposableFunctionArgs<{ + email: string; +}>; + +/** + * Data and methods returned from the {@link useNewsletter|useNewsletter()} composable + */ +export interface UseNewsletterInterface { + /** + * Updates subscription status of an email in the newsletter + */ + updateSubscription(params: UseNewsletterUpdateSubscriptionParams): Promise; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; +} diff --git a/composables/useStore/index.ts b/composables/useStore/index.ts new file mode 100644 index 0000000..be5a368 --- /dev/null +++ b/composables/useStore/index.ts @@ -0,0 +1,74 @@ +import { + computed, + readonly, + ref, + useContext, +} from '@nuxtjs/composition-api'; +import type { Ref } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { useConfigStore } from '~/stores/config'; +import type { StoreConfig } from '~/modules/GraphQL/types'; +import type { UseStoreInterface, UseStoreErrors } from '~/composables/useStore/useStore'; + +/** + * Allows loading and changing currently active store. + * + * See the {@link UseStoreInterface} for a list of methods and values available in this composable. + */ +export function useStore(): UseStoreInterface { + const loading: Ref = ref(false); + const error: Ref = ref({ + load: null, + change: null, + }); + const configStore = useConfigStore(); + const { app } = useContext(); + + const load = async (customQuery = { availableStores: 'availableStores' }, customHeaders = {}): Promise => { + Logger.debug('useStoreFactory.load'); + error.value.load = null; + + try { + loading.value = true; + const { data } = await app.$vsf.$magento.api.availableStores(customQuery, customHeaders); + + configStore.$patch((state) => { + state.stores = data?.availableStores ?? []; + }); + } catch (err) { + error.value.load = err; + } finally { + loading.value = false; + } + }; + + const change = (store: StoreConfig) => { + Logger.debug('useStoreFactory.change'); + + error.value.change = null; + + try { + loading.value = true; + app.$vsf.$magento.config.state.setStore(store.store_code); + app.$vsf.$magento.config.state.setCurrency(store.default_display_currency_code); + app.$vsf.$magento.config.state.setLocale(store.store_code); + const newStoreUrl = app.switchLocalePath(store.store_code); + window.location.replace(newStoreUrl); + } catch (err) { + error.value.change = err; + } + + loading.value = false; + }; + + return { + stores: computed(() => configStore.stores), + load, + change, + loading: readonly(loading), + error: readonly(error), + }; +} + +export default useStore; +export * from './useStore'; diff --git a/composables/useStore/useStore.ts b/composables/useStore/useStore.ts new file mode 100644 index 0000000..4940c8e --- /dev/null +++ b/composables/useStore/useStore.ts @@ -0,0 +1,53 @@ +import type { Ref, DeepReadonly } from '@nuxtjs/composition-api'; +import type { StoreConfig } from '~/modules/GraphQL/types'; +import type { AvailableStores } from '~/composables/types'; + +/** + * Errors that occured in the {@link useStore|useStore()} composable + */ +export interface UseStoreErrors { + /** + * Contains error if `load` method failed, otherwise is `null` + */ + load: Error | null; + + /** + * Contains error if `change` method failed, otherwise is `null` + */ + change: Error | null; +} + +/** + * Data and methods returned from the {@link useStore|useStore()} composable + */ +export interface UseStoreInterface { + /** + * Changes the current store and reloads the page + */ + change(store: StoreConfig): void; + + /** + * Fetches a list of available stores + * + * @remarks + * + * Internally, it calls the {@link @vue-storefront/magento-api#availableStores} API endpoint + * and accepts the custom queries named `availableStores`. + */ + load(customQuery?: { availableStores: string }): Promise; + + /** + * Main data object populated by the `load()` method + */ + stores: Ref; + + /** + * Indicates whether any of the methods is in progress + */ + loading: DeepReadonly>; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; +} diff --git a/composables/useUiHelpers/Params.ts b/composables/useUiHelpers/Params.ts new file mode 100644 index 0000000..df45d6b --- /dev/null +++ b/composables/useUiHelpers/Params.ts @@ -0,0 +1,32 @@ +/** + * Parameters received by URL search/query params that aren't filters. They're + * used for searching, sorting and pagination. + */ +export interface NonFilterParams { + itemsPerPage?: string; + page?: string; + sort?: string; + term?: string; +} + +/** Parameters received by URL search/query params. */ +export interface QueryParams extends NonFilterParams { + [key: string]: string | (string | null)[]; +} + +/** Parameters to filter products and other entities. */ +export interface FilterParams { + [key: string]: (null | string)[]; +} + +/** + * The normalized parameters received by URL search/query params for filtering, + * searching, sorting and pagination. + */ +export interface Params { + filters: FilterParams; + itemsPerPage: number; + page: number; + sort: string; + term?: string; +} diff --git a/composables/useUiHelpers/index.ts b/composables/useUiHelpers/index.ts index 65b6042..4d87967 100644 --- a/composables/useUiHelpers/index.ts +++ b/composables/useUiHelpers/index.ts @@ -1,112 +1,196 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { Category } from '@vue-storefront/magento-api'; -import { AgnosticCategoryTree, AgnosticFacet } from '@vue-storefront/core'; -import { getInstance } from '~/helpers/hooks/getInstance'; -import { useVueRouter } from '~/helpers/hooks/useVueRouter'; +import { useRoute, useRouter } from '@nuxtjs/composition-api'; +import type { CategoryTree } from '~/modules/GraphQL/types'; +import type { UseUiHelpersInterface } from '~/composables'; +import type { Params, QueryParams, FilterParams } from './Params'; +import type { FacetInterface } from '~/modules/catalog/category/types'; const nonFilters = new Set(['page', 'sort', 'term', 'itemsPerPage']); -const reduceFilters = (query) => (prev, curr) => { - const makeArray = Array.isArray(query[curr]) || nonFilters.has(curr); +function reduceFilters(query: QueryParams) { + return (prev: FilterParams, curr: string): FilterParams => { + const makeArray = Array.isArray(query[curr]) || nonFilters.has(curr); - return { - ...prev, - [curr]: makeArray ? query[curr] : [query[curr]], + return { + ...prev, + [curr]: makeArray ? query[curr] as string[] : [query[curr] as string], + }; + }; +} + +/** + * Allows handling the parameters for filtering, + * searching, sorting and pagination in the URL search/query params. + * + * See the {@link UseUiHelpersInterface} for a list of methods and values available in this composable. + */ +export function useUiHelpers(): UseUiHelpersInterface { + const route = useRoute(); + const router = useRouter(); + let { query: routerQuery } = route.value; + + const resolveQuery = (): QueryParams => { + if (typeof window !== 'undefined') { + routerQuery = router.resolve((window.location.pathname + window.location.search).slice(1)).route.query; + } + + return routerQuery; }; -}; - -const getFiltersDataFromUrl = (context, onlyFilters) => { - const { query } = context.$router.history.current; - - return Object.keys(query) - .filter((f) => (onlyFilters ? !nonFilters.has(f) : nonFilters.has(f))) - .reduce(reduceFilters(query), {}); -}; -const useUiHelpers = () => { - const { route } = useVueRouter(); - const instance = getInstance(); + const getFiltersDataFromUrl = (onlyFilters = false): FilterParams => { + const currentQuery = resolveQuery(); + return ( + Object.keys(currentQuery) + .filter((f) => (onlyFilters ? !nonFilters.has(f) : f)) + // eslint-disable-next-line unicorn/prefer-object-from-entries + .reduce(reduceFilters(currentQuery), {}) + ); + }; - const getFacetsFromURL = () => { - const { query } = route; + const getFacetsFromURL = (): Params => { + const currentQuery = resolveQuery(); return { - filters: getFiltersDataFromUrl(instance, true), - itemsPerPage: Number.parseInt(query.itemsPerPage as string, 10) || 10, - page: Number.parseInt(query.page as string, 10) || 1, - sort: query.sort as string || '', - term: query.term as string, + filters: getFiltersDataFromUrl(true), + itemsPerPage: Number.parseInt(currentQuery.itemsPerPage, 10) || 10, + page: Number.parseInt(currentQuery.page, 10) || 1, + sort: currentQuery.sort ?? '', + term: currentQuery.term, }; }; const changeSearchTerm = (term: string) => term; - const getSearchTermFromUrl = () => { - const { query } = route; + const getSearchTermFromUrl = (): Params => { + const currentQuery = resolveQuery(); return { - page: Number.parseInt(query.page as string, 10) || 1, - sort: query.sort || '', - filters: getFiltersDataFromUrl(instance, true), - itemsPerPage: Number.parseInt(query.itemsPerPage as string, 10) || 10, - term: query.term, + page: Number.parseInt(currentQuery.page, 10) || 1, + sort: currentQuery.sort ?? '', + filters: getFiltersDataFromUrl(true), + itemsPerPage: Number.parseInt(currentQuery.itemsPerPage, 10) || 10, + term: currentQuery.term, }; }; - const getCatLink = (category: Category): 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 + * + * @param sort + * @param forcePush + */ + const changeSorting = async (sort: string, forcePush = true): Promise => { + if (forcePush) { + await router.push({ query: { ...routerQuery, sort } }); + } else { + const routeData = router.resolve({ + query: { + ...getFiltersDataFromUrl(), + sort, + }, + }); + window.history.pushState({}, null, routeData.href); + } + }; - const getAgnosticCatLink = (category: AgnosticCategoryTree): string => `/c${category.slug}`; + /** + * Force push for a backward compatibility in other places, should be removed + * + * @param filters + * @param forcePush + */ + const changeFilters = async (filters: FilterParams, forcePush = true): Promise => { + const query = { + ...getFiltersDataFromUrl(false), + ...filters, + }; - const changeSorting = (sort: string) => { - // @ts-ignore - const { query } = route; - instance.$router.push({ query: { ...query, sort } }); + if (forcePush) { + await router.push({ query }); + } else { + const routeData = router.resolve({ query }); + window.history.pushState({}, null, routeData.href); + } }; - const changeFilters = (filters: any) => { - instance.$router.push({ - query: { - ...getFiltersDataFromUrl(instance, false), - ...filters, - }, - }); + const clearFilters = async (forcePush = true): Promise => { + if (forcePush) { + await router.push({ + query: {}, + }); + } else { + const routeData = router.resolve({ + query: {}, + }); + window.history.pushState({}, null, routeData.href); + } }; - const changeItemsPerPage = (itemsPerPage: number) => { - instance.$router.push({ - query: { - ...getFiltersDataFromUrl(instance, false), - itemsPerPage, - }, - }); + /** + * Force push for a backward compatibility in other places, should be removed + * + * @param itemsPerPage + * @param forcePush + */ + const changeItemsPerPage = async (itemsPerPage: number, forcePush = true): Promise => { + const query = { + ...getFiltersDataFromUrl(false), + itemsPerPage: itemsPerPage.toString(10), + page: '0', + }; + + if (forcePush) { + await router.push({ query }); + } else { + const routeData = router.resolve({ query }); + window.history.pushState({}, null, routeData.href); + } }; - const setTermForUrl = (term: string) => { - instance.$router.push({ + const changePage = async (page: number, forcePush = true): Promise => { + const query = { + ...getFiltersDataFromUrl(false), + page: page.toString(), + }; + + if (forcePush) { + await router.push({ query }); + } else { + const routeData = router.resolve({ query }); + window.history.pushState({}, null, routeData.href); + } + }; + + const setTermForUrl = async (term: string): Promise => { + await router.push({ query: { - ...getFiltersDataFromUrl(instance, false), + ...getFiltersDataFromUrl(false), term: term || undefined, }, }); }; - const isFacetColor = (facet: AgnosticFacet): boolean => facet.id === 'color'; + const isFacetColor = (facet: FacetInterface): boolean => facet.id === 'color'; const isFacetCheckbox = (): boolean => false; return { - getFacetsFromURL, - getCatLink, - getAgnosticCatLink, - changeSorting, changeFilters, changeItemsPerPage, - setTermForUrl, - isFacetColor, - isFacetCheckbox, - getSearchTermFromUrl, changeSearchTerm, + changeSorting, + clearFilters, + getCatLink, + getFacetsFromURL, + getSearchTermFromUrl, + isFacetCheckbox, + isFacetColor, + setTermForUrl, + changePage, }; -}; +} +export * from './Params'; +export * from './useUiHelpers'; export default useUiHelpers; diff --git a/composables/useUiHelpers/useUiHelpers.ts b/composables/useUiHelpers/useUiHelpers.ts new file mode 100644 index 0000000..c74cd87 --- /dev/null +++ b/composables/useUiHelpers/useUiHelpers.ts @@ -0,0 +1,70 @@ +import type { CategoryTree } from '~/modules/GraphQL/types'; +import type { FilterParams, Params } from './Params'; +import type { FacetInterface } from '~/modules/catalog/category/types'; + +/** + * Data and methods returned from the {@link useUiHelpers} composable. + */ +export interface UseUiHelpersInterface { + /** + * Updates current URL with filters as query/search params. + * + * It forces the navigation to updated URL when `forcePush` is `true`. + */ + changeFilters(filters: FilterParams, forcePush?: boolean): Promise; + + /** + * Updates current URL with items per page count as query/search param. + * + * It forces the navigation to updated URL when `forcePush` is `true`. + */ + changeItemsPerPage(itemsPerPage: number, forcePush?: boolean): Promise; + + /** + * Returns received term. Use {@link UseUiHelpersInterface#setTermForUrl} + * instead. + */ + changeSearchTerm(term: string): string; + + /** + * Updates current URL with sorting as query/search param. + * + * It forces the navigation to updated URL when `forcePush` is `true`. + */ + changeSorting(sort: string, forcePush?: boolean): Promise; + + /** + * Clears filters from current URL query/search params. + * + * It forces the navigation to updated URL when `forcePush` is `true`. + */ + clearFilters(forcePush?: boolean): Promise; + + /** + * Updates current URL with a page as a query/search param. + * + * It forces the navigation to updated URL when `forcePush` is `true`. + */ + changePage(page: number, forcePush?: boolean): Promise; + + /** Gets route link for received category. */ + getCatLink(category: CategoryTree): string; + + /** Gets facets parameters from current URL query/search params. */ + getFacetsFromURL(): Params; + + /** Gets search term and other params from current URL query/search params. */ + getSearchTermFromUrl(): Params; + + isFacetCheckbox(): boolean; + + /** Checks if received facet is a color facet. */ + isFacetColor(facet: FacetInterface): boolean; + + /** + * Updates current URL with the search term as query/search param and + * navigates to it. + */ + setTermForUrl(term?: string): Promise; + +} diff --git a/composables/useUiNotification/index.ts b/composables/useUiNotification/index.ts index 8f514b3..ea7629b 100644 --- a/composables/useUiNotification/index.ts +++ b/composables/useUiNotification/index.ts @@ -1,18 +1,11 @@ -import { computed, reactive } from '@vue/composition-api'; - -interface UiNotification { - message: string; - title?: string; - action?: { text: string; onClick: (...args: any) => void }; - type: 'danger' | 'success' | 'info'; - icon: string; - persist?: boolean; - id: symbol; - dismiss?: () => void; -} +import { computed, reactive, useContext } from '@nuxtjs/composition-api'; +import type { + UiNotification, + UseUiNotificationInterface, +} from './useUiNotification'; interface Notifications { - notifications: Array; + notifications: UiNotification[]; } const state = reactive({ @@ -21,7 +14,16 @@ const state = reactive({ const maxVisibleNotifications = 3; const timeToLive = 3000; -const useUiNotification = () => { +/** + * Allows managing and showing notifications to the user. + * + * See the {@link UseUiNotificationInterface} for a list of methods and values available in this composable. + */ +export function useUiNotification(): UseUiNotificationInterface { + const { app } = useContext(); + // @ts-ignore + const cookieMessage = app.$vsf.$magento.config.state.getMessage(); + const send = (notification: UiNotification) => { const id = Symbol('id'); @@ -29,6 +31,9 @@ const useUiNotification = () => { const index = state.notifications.findIndex((n) => n.id === id); if (index !== -1) state.notifications.splice(index, 1); + + // @ts-ignore + app.$vsf.$magento.config.state.removeMessage(); }; const newNotification = { @@ -37,18 +42,32 @@ const useUiNotification = () => { dismiss, }; - state.notifications.push(newNotification); - if (state.notifications.length > maxVisibleNotifications) state.notifications.shift(); + if (!state.notifications.some((stateNotification) => stateNotification.message === notification.message)) { + state.notifications.push(newNotification); + } + + if (state.notifications.length > maxVisibleNotifications) { + state.notifications.shift(); + } if (!notification.persist) { setTimeout(dismiss, timeToLive); } }; + if (cookieMessage) { + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + send(cookieMessage); + // @ts-ignore + app.$vsf.$magento.config.state.removeMessage(); + } + return { send, notifications: computed(() => state.notifications), }; -}; +} export default useUiNotification; +export * from './useUiNotification'; diff --git a/composables/useUiNotification/useUiNotification.ts b/composables/useUiNotification/useUiNotification.ts new file mode 100644 index 0000000..d0e9c3f --- /dev/null +++ b/composables/useUiNotification/useUiNotification.ts @@ -0,0 +1,32 @@ +import type { ComputedRef } from '@nuxtjs/composition-api'; + +export type UiNotificationType = 'secondary' | 'info' | 'success' | 'warning' | 'danger'; + +export interface UiNotification { + message: string; + title?: string; + action?: { + text: string; + onClick(...args: any): void; + }; + type: UiNotificationType; + icon: string; + persist?: boolean; + id: symbol; + dismiss?: () => void; +} + +/** + * Data and methods returned from the {@link useUiNotification|useUiNotification()} composable + */ +export interface UseUiNotificationInterface { + /** + * Displays the notification in the UI + */ + send(notification: UiNotification): void; + + /** + * Contains notifications added using the `send` method + */ + notifications: ComputedRef; +} diff --git a/composables/useUiState.ts b/composables/useUiState/index.ts similarity index 61% rename from composables/useUiState.ts rename to composables/useUiState/index.ts index 803a7bf..721248d 100644 --- a/composables/useUiState.ts +++ b/composables/useUiState/index.ts @@ -1,10 +1,7 @@ -import Vue from 'vue'; -import VueCompositionAPI, { reactive, computed } from '@vue/composition-api'; +import { computed, reactive } from '@nuxtjs/composition-api'; +import { StateInterface, UseUiStateInterface } from '~/composables/useUiState/useUiState'; -// We need to register it again because of Vue instance instantiation issues -Vue.use(VueCompositionAPI); - -const state = reactive({ +const state = reactive({ isCartSidebarOpen: false, isWishlistSidebarOpen: false, isLoginModalOpen: false, @@ -15,39 +12,35 @@ const state = reactive({ isMobileMenuOpen: false, }); -const useUiState = () => { - const isMobileMenuOpen = computed(() => state.isMobileMenuOpen); +/** + * Global store for managing UI state. + * + * See the {@link UseUiStateInterface} for a list of methods and values available in this composable. + */ +export function useUiState(): UseUiStateInterface { const toggleMobileMenu = () => { state.isMobileMenuOpen = !state.isMobileMenuOpen; }; - const isCartSidebarOpen = computed(() => state.isCartSidebarOpen); const toggleCartSidebar = () => { if (state.isMobileMenuOpen) toggleMobileMenu(); state.isCartSidebarOpen = !state.isCartSidebarOpen; }; - const isWishlistSidebarOpen = computed(() => state.isWishlistSidebarOpen); const toggleWishlistSidebar = () => { if (state.isMobileMenuOpen) toggleMobileMenu(); state.isWishlistSidebarOpen = !state.isWishlistSidebarOpen; }; - const isLoginModalOpen = computed(() => state.isLoginModalOpen); const toggleLoginModal = () => { if (state.isMobileMenuOpen) toggleMobileMenu(); state.isLoginModalOpen = !state.isLoginModalOpen; }; - const isNewsletterModalOpen = computed(() => state.isNewsletterModalOpen); const toggleNewsletterModal = () => { state.isNewsletterModalOpen = !state.isNewsletterModalOpen; }; - const isCategoryGridView = computed(() => state.isCategoryGridView); - - const isWishlistGridView = computed(() => state.isWishlistGridView); - const changeToCategoryGridView = () => { state.isCategoryGridView = true; }; @@ -62,21 +55,20 @@ const useUiState = () => { const changeToWishlistListView = () => { state.isWishlistGridView = false; }; - - const isFilterSidebarOpen = computed(() => state.isFilterSidebarOpen); const toggleFilterSidebar = () => { state.isFilterSidebarOpen = !state.isFilterSidebarOpen; }; return { - isCartSidebarOpen, - isWishlistSidebarOpen, - isLoginModalOpen, - isNewsletterModalOpen, - isCategoryGridView, - isWishlistGridView, - isFilterSidebarOpen, - isMobileMenuOpen, + isMobileMenuOpen: computed(() => state.isMobileMenuOpen), + isCartSidebarOpen: computed(() => state.isCartSidebarOpen), + isWishlistSidebarOpen: computed(() => state.isWishlistSidebarOpen), + isLoginModalOpen: computed(() => state.isLoginModalOpen), + isNewsletterModalOpen: computed(() => state.isNewsletterModalOpen), + isCategoryGridView: computed(() => state.isCategoryGridView), + isWishlistGridView: computed(() => state.isWishlistGridView), + isFilterSidebarOpen: computed(() => state.isFilterSidebarOpen), + toggleMobileMenu, toggleCartSidebar, toggleWishlistSidebar, toggleLoginModal, @@ -86,8 +78,8 @@ const useUiState = () => { changeToWishlistGridView, changeToWishlistListView, toggleFilterSidebar, - toggleMobileMenu, }; -}; +} export default useUiState; +export * from './useUiState'; diff --git a/composables/useUiState/useUiState.ts b/composables/useUiState/useUiState.ts new file mode 100644 index 0000000..90a7748 --- /dev/null +++ b/composables/useUiState/useUiState.ts @@ -0,0 +1,107 @@ +import { ComputedRef } from '@nuxtjs/composition-api'; + +export interface StateInterface { + isCartSidebarOpen: boolean; + isWishlistSidebarOpen: boolean; + isLoginModalOpen: boolean; + isNewsletterModalOpen: boolean; + isCategoryGridView: boolean; + isWishlistGridView: boolean; + isFilterSidebarOpen: boolean; + isMobileMenuOpen: boolean; +} + +/** + * Data and methods returned from the {@link useUiState|useUiState()} composable + */ +export interface UseUiStateInterface { + /** + * Indicates whether the mobile menu is open + */ + isMobileMenuOpen: ComputedRef; + + /** + * Indicates whether the cart sidebar is open + */ + isCartSidebarOpen: ComputedRef; + + /** + * Indicates whether the wishlist sidebar is open + */ + isWishlistSidebarOpen: ComputedRef; + + /** + * Indicates whether the login modal is open + */ + isLoginModalOpen: ComputedRef; + + /** + * Indicates whether the newsletter modal is open + */ + isNewsletterModalOpen: ComputedRef; + + /** + * Indicates whether the product list uses the grid layout + */ + isCategoryGridView: ComputedRef; + + /** + * Indicates whether the wishlist uses the grid layout + */ + isWishlistGridView: ComputedRef; + + /** + * Indicates whether the filter sidebar is open + */ + isFilterSidebarOpen: ComputedRef; + + /** + * Toggles the visibility of the mobile menu + */ + toggleMobileMenu(): void; + + /** + * Toggles the visibility of the wishlist sidebar + */ + toggleWishlistSidebar(): void; + + /** + * Toggles the visibility of the login modal + */ + toggleLoginModal(): void; + + /** + * Toggles the visibility of the newsletter modal + */ + toggleNewsletterModal(): void; + + /** + * Changes the layout of the category page to grid + */ + changeToCategoryGridView(): void; + + /** + * Changes the layout of the category page to a list + */ + changeToCategoryListView(): void; + + /** + * Changes the layout of the wishlist to grid + */ + changeToWishlistGridView(): void; + + /** + * Changes the layout of the wishlist to a list + */ + changeToWishlistListView(): void; + + /** + * Toggles the visibility of the filter sidebar + */ + toggleFilterSidebar(): void; + + /** + * Toggles the visibility of the cart modal + */ + toggleCartSidebar(): void; +} diff --git a/composables/useUrlResolver/UseUrlResolver.ts b/composables/useUrlResolver/UseUrlResolver.ts new file mode 100644 index 0000000..469cf6f --- /dev/null +++ b/composables/useUrlResolver/UseUrlResolver.ts @@ -0,0 +1,42 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import { RoutableInterface } from '~/modules/GraphQL/types'; + +/** + * Errors that occured in the {@link UseUrlResolverErrors|UseUrlResolverErrors()} composable + */ +export interface UseUrlResolverErrors { + /** + * Contains error if `search` method failed, otherwise is `null` + */ + search: Error | null; +} + +/** + * Data and methods returned from the {@link useUrlResolver|useUrlResolver()} composable. + * + * @remarks + * + * `ROUTE_TYPE` is a generic type and can be one of: `CategoryTree`, `CmsPage`, `VirtualProduct`, `SimpleProduct`, + * `DownloadableProduct`, `BundleProduct`, `GroupedProduct` or `ConfigurableProduct` + */ +export interface UseUrlResolverInterface { + /** + * The current route path + */ + path: string; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; + + /** + * Searches the resolver for current route URL + */ + search(): Promise; +} diff --git a/composables/useUrlResolver/index.ts b/composables/useUrlResolver/index.ts new file mode 100644 index 0000000..c330975 --- /dev/null +++ b/composables/useUrlResolver/index.ts @@ -0,0 +1,60 @@ +import { + readonly, + ref, + useRoute, + useContext, +} from '@nuxtjs/composition-api'; +import { RoutableInterface } from '~/modules/GraphQL/types'; +import { Logger } from '~/helpers/logger'; +import type { ComposableFunctionArgs, UseUrlResolverErrors, UseUrlResolverInterface } from '~/composables'; + +/** + * Allows searching the resolver for current + * route path (URL). + * + * See the {@link UseUrlResolverInterface} for a list of methods and values available in this composable. + */ +export function useUrlResolver(): UseUrlResolverInterface { + const route = useRoute(); + const { error: nuxtError, app } = useContext(); + const context = app.$vsf; + const { path } = route.value; + const loading = ref(false); + const error = ref({ + search: null, + }); + + const search = async (params?: ComposableFunctionArgs<{}>): Promise => { + loading.value = true; + let results: RoutableInterface | null = null; + + try { + const clearUrl = path.replace(/[a-z]+\/[cp|]\//gi, ''); + Logger.debug('[Magento] Find information based on URL', { clearUrl }); + const { data } = await context.$magento.api.route(clearUrl, params?.customQuery ?? null, params?.customHeaders ?? null); + results = data?.route ?? null; + + if (!results) nuxtError({ statusCode: 404 }); + + Logger.debug('[Result]:', { results }); + } catch (err) { + error.value.search = err; + + Logger.error('useUrlResolver/search', err); + } finally { + loading.value = false; + } + + return results; + }; + + return { + path, + search, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './UseUrlResolver'; +export default useUrlResolver; diff --git a/composables/utils/mask.ts b/composables/utils/mask.ts new file mode 100644 index 0000000..7097437 --- /dev/null +++ b/composables/utils/mask.ts @@ -0,0 +1,19 @@ +const maskString = (el: string) => `${el.charAt(0)}***${el.slice(-1)}`; + +const maskAny = (el: any) => { + if (typeof el === 'string') { + return maskString(el); + } + + return '***'; +}; + +const mask = (el: Object): any => { + if (typeof el === 'object' && !Array.isArray(el)) { + return Object.fromEntries(Object.keys(el).map((key) => [key, maskAny(el[key])])); + } + + return maskAny(el); +}; + +export default mask; diff --git a/config.js b/config.js deleted file mode 100644 index a6ce772..0000000 --- a/config.js +++ /dev/null @@ -1,72 +0,0 @@ -require('dotenv').config(); -const fs = require('fs'); -const convict = require('convict'); - -convict.addFormat(require('convict-format-with-validator').url); - -const config = convict({ - env: { - doc: 'Current Store Running Environment', - format: String, - default: process.env.STORE_ENV || 'dev', - env: 'STORE_ENV', - }, - // region Magento 2 VueStorefront - magentoGraphQl: { - doc: 'The Magento GraphQL API URL', - format: 'url', - default: process.env.MAGENTO_GRAPHQL || 'http://localhost:8080/graphql', - env: 'MAGENTO_GRAPHQL', - }, - enableMagentoExternalCheckout: { - doc: 'Enable the usage of Magento External Checkout flow.', - format: Boolean, - default: process.env.MAGENTO_EXTERNAL_CHECKOUT || false, - env: 'MAGENTO_EXTERNAL_CHECKOUT', - }, - externalCheckoutUrl: { - doc: 'The Magento External Checkout URL', - format: 'url', - default: process.env.MAGENTO_EXTERNAL_CHECKOUT_URL || 'http://localhost:8080', - env: 'MAGENTO_EXTERNAL_CHECKOUT_URL', - }, - externalCheckoutSyncPath: { - doc: 'The Magento External Checkout Sync Path', - format: String, - default: process.env.MAGENTO_EXTERNAL_CHECKOUT_SYNC_PATH || '/vue/cart/sync', - env: 'MAGENTO_EXTERNAL_CHECKOUT_SYNC_PATH', - }, - // endregion - storeUrl: { - doc: 'Store base URL', - format: String, - default: process.env.STORE_URL || 'http://localhost:3000', - env: 'STORE_URL', - }, - nuxtAppEnvironment: { - doc: 'Nuxt Store environment', - format: String, - default: process.env.NUXT_APP_ENV || 'development', - env: 'NUXT_APP_ENV', - }, - nuxtAppPort: { - doc: 'Nuxt Store Application Port', - format: Number, - default: process.env.NUXT_APP_PORT || 3000, - env: 'NUXT_APP_PORT', - }, -}); - -const env = config.get('env'); -const filePath = `./config/${env}.json`; -try { - fs.readFileSync(filePath, { encoding: 'utf8' }); - config.loadFile(filePath); -} catch { - console.warn('[Magento: Middleware Config] Not found any configuration file, will use the ENV variable or default configuration.'); -} - -// Perform validation -config.validate({ allowed: 'strict' }); - -module.exports = config; diff --git a/config/example.json b/config/example.json deleted file mode 100644 index cb367c9..0000000 --- a/config/example.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "storeUrl": "http://localhost:3000", - "nuxtAppEnvironment": "development", - "nuxtAppPort": 3000, - "magentoGraphQl": "https://{YOUR_SITE_FRONT_URL}/graphql", - "enableMagentoExternalCheckout": false, - "externalCheckoutUrl": "https://{YOUR_SITE_FRONT_URL}", - "externalCheckoutSyncPath": "/vue/cart/sync" -} diff --git a/ecosystem.config.js b/ecosystem.config.js index e8900a6..33f4b4e 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -1,3 +1,5 @@ +// the PM2 ecosystem.config.js needs to use module.exports +// eslint-disable-next-line unicorn/prefer-module module.exports = { apps: [ { diff --git a/helpers/README.md b/helpers/README.md deleted file mode 100644 index 87300cb..0000000 --- a/helpers/README.md +++ /dev/null @@ -1 +0,0 @@ -Put here platform-specific, non-agnostic functions that overwrite default code. diff --git a/helpers/__tests__/asyncLocalStorage.spec.ts b/helpers/__tests__/asyncLocalStorage.spec.ts new file mode 100644 index 0000000..5d6d9c3 --- /dev/null +++ b/helpers/__tests__/asyncLocalStorage.spec.ts @@ -0,0 +1,73 @@ +import { + setItem, getItem, mergeItem, removeItem, clear, +} from '~/helpers/asyncLocalStorage'; + +/* eslint-disable no-underscore-dangle */ + +describe('asyncLocalStorage :: Promised Based Localstorage Management', () => { + test('setItem :: should store to localStorage by key', async () => { + const KEY = 'jest'; + const VSF_KEY = `vsf-${KEY}`; + const VALUE = 'jest-localstorage-value'; + const VSF_VALUE = JSON.stringify(VALUE); + + await setItem(KEY, VALUE); + + expect(localStorage.setItem).toHaveBeenLastCalledWith(VSF_KEY, VSF_VALUE); + expect(localStorage.__STORE__[VSF_KEY]).toBe(VSF_VALUE); + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(1); + }); + + test('getItem :: should get value from localStorage by key', async () => { + const KEY = 'jest'; + const VSF_KEY = `vsf-${KEY}`; + const VSF_VALUE = 'jest-localstorage-value'; + + const VALUE = await getItem(KEY); + + expect(localStorage.getItem).toHaveBeenLastCalledWith(VSF_KEY); + expect(localStorage.__STORE__[VSF_KEY]).toBe(JSON.stringify(VALUE)); + expect(VSF_VALUE).toBe(VALUE); + }); + + test('merge :: should merge values to localStorage by key', async () => { + const KEY = 'jest'; + const VSF_KEY = `vsf-${KEY}`; + const VALUE = { row1: 'Lonely' }; + const VSF_VALUE = JSON.stringify(VALUE); + const MERGE_VALUE = { row2: 'Not anymore' }; + const VSF_MERGE_VALUE = JSON.stringify({ + row1: 'Lonely', + row2: 'Not anymore', + }); + + await setItem(KEY, VALUE); + + expect(localStorage.__STORE__[VSF_KEY]).toBe(VSF_VALUE); + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(1); + + await mergeItem(KEY, MERGE_VALUE); + + expect(localStorage.__STORE__[VSF_KEY]).toBe(VSF_MERGE_VALUE); + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(1); + }); + + test('remove :: should remove a key and value from localStorage', async () => { + const KEY = 'jest'; + const VSF_KEY = `vsf-${KEY}`; + + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(1); + + await removeItem(KEY); + + expect(localStorage.removeItem).toHaveBeenCalledWith(VSF_KEY); + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(0); + }); + + test('clear :: should clear all values and keys from localStorage', async () => { + await clear(); + + expect(localStorage.clear).toHaveBeenCalledWith(); + expect(Object.keys(localStorage.__STORE__ as Object)).toHaveLength(0); + }); +}); diff --git a/helpers/__tests__/formatCurrency.spec.js b/helpers/__tests__/formatCurrency.spec.js new file mode 100644 index 0000000..2e0bfe2 --- /dev/null +++ b/helpers/__tests__/formatCurrency.spec.js @@ -0,0 +1,16 @@ +import formatCurrency from '~/helpers/formatCurrency'; + +describe('formatCurrency()', () => { + it('executed without required options should throw error', () => { + expect(() => { formatCurrency(100, 'en-US', {}); }).toThrowError(); + }); + + it('should return formatted currency string', () => { + const currency = 'EUR'; + jest.spyOn(Intl, 'NumberFormat').mockImplementation(() => ({ + format: (value) => `${value}${currency}`, + })); + const result = formatCurrency(123, 'de-DE', { currency }); + expect(result).toBe('123EUR'); + }); +}); diff --git a/helpers/addBasePath.ts b/helpers/addBasePath.ts new file mode 100644 index 0000000..df9d2e0 --- /dev/null +++ b/helpers/addBasePath.ts @@ -0,0 +1,17 @@ +import { useRouter } from '@nuxtjs/composition-api'; + +/** + * Adds prefix with base path configured in router.base to provided url + * @param {string} path - url to which base path will be added + * @returns Relative path prefixed with router.base or not modified absolute path (it needs start from http or https) + */ +export const addBasePath = (path: string): string => { + const pattern = /^((http|https):\/\/)/; + + if (pattern.test(path)) { + return path; + } + + const basePath = (useRouter().options.base).slice(0, -1); + return `${basePath}${path}`; +}; diff --git a/helpers/asyncLocalStorage.ts b/helpers/asyncLocalStorage.ts new file mode 100644 index 0000000..f257607 --- /dev/null +++ b/helpers/asyncLocalStorage.ts @@ -0,0 +1,60 @@ +const getVsfKey = (key: string) => `vsf-${key}`; + +type Callback = (error: Error | null, value?: TValue) => void; + +const mergeLocalStorageItem = (key: string, value: Record) : void => { + const oldValue = window.localStorage.getItem(key); + const oldObject = JSON.parse(oldValue); + const newObject = value; + const nextValue = JSON.stringify({ + ...JSON.parse(JSON.stringify(oldObject)), + ...JSON.parse(JSON.stringify(newObject)), + }); + window.localStorage.setItem(key, nextValue); +}; + +const createPromise = ( + getValue: () => TValue, + callback: Callback, +) : Promise => new Promise((resolve, reject) => { + try { + const value = getValue(); + if (callback) { + callback(null, value); + } + resolve(value); + } catch (err) { + if (callback) { + callback(err as Error); + } + reject(err); + } +}); + +export const getItem = ( + key: string, + callback?: Callback, +): Promise => createPromise(() => JSON.parse(window.localStorage.getItem(getVsfKey(key))), callback); + +export const setItem = ( + key: string, + value: T, + callback?: Callback, +): Promise => createPromise(() => (window.localStorage.setItem(getVsfKey(key), JSON.stringify(value))), callback); + +export const removeItem = ( + key: string, + callback?: Callback, +): Promise => createPromise(() => { + window.localStorage.removeItem(getVsfKey(key)); +}, callback); + +export const mergeItem = ( + key: string, + value: Record, + callback?: Callback, +): Promise => createPromise(() => mergeLocalStorageItem(getVsfKey(key), value), callback); + +export const clear = (callback?: Callback): Promise => createPromise(() => { + window.localStorage.clear(); +}, callback); diff --git a/helpers/cacheControl.js b/helpers/cacheControl.js deleted file mode 100644 index ecfe60d..0000000 --- a/helpers/cacheControl.js +++ /dev/null @@ -1,11 +0,0 @@ -const cacheControl = (values) => ({ res }) => { - if (!process.server) return; - - const cacheControlValue = Object.entries(values) - .map(([key, value]) => `${key}=${value}`) - .join(','); - - res.setHeader('Cache-Control', cacheControlValue); -}; - -export default cacheControl; diff --git a/helpers/cart/addToCart.ts b/helpers/cart/addToCart.ts new file mode 100644 index 0000000..253b259 --- /dev/null +++ b/helpers/cart/addToCart.ts @@ -0,0 +1,43 @@ +import { useRouter, useContext } from '@nuxtjs/composition-api'; +import type { Product } from '~/modules/catalog/product/types'; +import useCart from '~/modules/checkout/composables/useCart'; +import { useProduct } from '~/modules/catalog/product/composables/useProduct'; + +export const useAddToCart = () => { + const { + addItem: addItemToCartBase, + isInCart, + } = useCart(); + const router = useRouter(); + const { app } = useContext(); + const { getProductPath } = useProduct(); + const addItemToCart = async (params: { product: Product, quantity: number }) => { + const { product, quantity } = params; + // @ts-ignore + // eslint-disable-next-line no-underscore-dangle + const productType = product.__typename; + + switch (productType) { + case 'SimpleProduct': + await addItemToCartBase({ + product, + quantity, + }); + break; + case 'BundleProduct': + case 'ConfigurableProduct': + case 'GroupedProduct': + const path = app.localeRoute(getProductPath(product)); + + await router.push(path); + break; + default: + throw new Error(`Product Type ${productType} not supported in add to cart yet`); + } + }; + + return { + addItemToCart, + isInCart, + }; +}; diff --git a/helpers/category/getCategoryPath.js b/helpers/category/getCategoryPath.js deleted file mode 100644 index e8ac2f5..0000000 --- a/helpers/category/getCategoryPath.js +++ /dev/null @@ -1,3 +0,0 @@ -export function getCategoryPath(category, context = this) { - return `/c/${context.$route.params.slug_1}/${category.slug}`; -} diff --git a/helpers/category/getCategorySearchParameters.js b/helpers/category/getCategorySearchParameters.js deleted file mode 100644 index ef12a45..0000000 --- a/helpers/category/getCategorySearchParameters.js +++ /dev/null @@ -1,6 +0,0 @@ -export const getCategorySearchParameters = (context) => { - const { path } = context.root.$route; - const slug = path.replace(/^\/c\//, ''); - - return { slug }; -}; diff --git a/helpers/category/index.js b/helpers/category/index.js deleted file mode 100644 index 1e86aa1..0000000 --- a/helpers/category/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { getCategorySearchParameters } from './getCategorySearchParameters'; -import { getCategoryPath } from './getCategoryPath'; - -// TODO: remove, use faceting instead -export { - getCategorySearchParameters, - getCategoryPath -}; diff --git a/helpers/checkout/__tests__/steps.spec.js b/helpers/checkout/__tests__/steps.spec.js new file mode 100644 index 0000000..30fc6e8 --- /dev/null +++ b/helpers/checkout/__tests__/steps.spec.js @@ -0,0 +1,25 @@ +import { isPreviousStepValid } from '~/helpers/checkout/steps'; + +const CHECKOUT_DATA = { + 'my-account': { a: 'b', c: 'd' }, +}; + +describe('steps :: steps helper for the checkout', () => { + beforeEach(() => { + localStorage.clear(); + + localStorage.setItem('vsf-checkout', JSON.stringify(CHECKOUT_DATA)); + }); + + test('user can continue', async () => { + const isValid = await isPreviousStepValid('my-account'); + + expect(isValid).toBeTruthy(); + }); + + test('user can\'t continue', async () => { + const isValid = await isPreviousStepValid('billing'); + + expect(isValid).toBeFalsy(); + }); +}); diff --git a/helpers/checkout/address.js b/helpers/checkout/address.js deleted file mode 100644 index edb1ee9..0000000 --- a/helpers/checkout/address.js +++ /dev/null @@ -1,30 +0,0 @@ -export const formatAddressReturnToData = (address) => ({ - city: address.city, - firstname: address.firstname, - lastname: address.lastname, - postcode: address.postcode, - region: address.region.code, - street: address.street[0], - apartment: address.street[1], - telephone: address.telephone, - country_code: address.country.code, -}); - -export const addressFromApiToForm = (address) => { - // eslint-disable-next-line no-underscore-dangle - if (address?.__typename) { - return { - firstname: address.firstname, - lastname: address.lastname, - street: Array.isArray(address.street) ? address.street[0] : '', - apartment: Array.isArray(address.street) ? (address.street[1] || '') : '', - city: address.city, - region: address?.region?.code || address?.region?.region, - country_code: address?.country?.code || address.country_code, - postcode: address.postcode, - telephone: address.telephone, - }; - } - - return address; -}; diff --git a/helpers/checkout/address.ts b/helpers/checkout/address.ts new file mode 100644 index 0000000..82e4856 --- /dev/null +++ b/helpers/checkout/address.ts @@ -0,0 +1,76 @@ +import { isEqual } from 'lodash-es'; +import type { CustomerAddress, CartAddressInterface } from '~/modules/GraphQL/types'; + +export const formatAddressReturnToData = (address: CartAddressInterface) => ({ + firstname: address.firstname, + lastname: address.lastname, + street: address.street[0], + apartment: address.street[1], + city: address.city, + region: address.region.code, + country_code: address.country.code, + postcode: address.postcode, + telephone: address.telephone, +}); + +/** + * Converts addresses that were: + * * added to the logged in user's account + * * saved in the cart (eg. completed the shipping address step and saved in the Checkout page, then went to some other page) + * into the form data format used by Billing and Shipping forms in the Checkout page + */ +export const addressFromApiToForm = (address: CustomerAddress | CartAddressInterface) : CheckoutAddressForm => ({ + firstname: address.firstname, + lastname: address.lastname, + street: address.street?.[0], + apartment: address.street?.[1], + city: address.city, + region: (address as CustomerAddress)?.region?.region_code ?? (address as CartAddressInterface).region.code, + country_code: (address as CustomerAddress)?.country_code ?? (address as CartAddressInterface).country.code, + postcode: address.postcode, + telephone: address.telephone, +}); + +export interface CheckoutAddressForm { + firstname: string; + lastname: string; + street: string; + apartment: string; + city: string; + region: string; + country_code: string; + postcode: string; + telephone: string; +} + +export const getInitialCheckoutAddressForm = () : CheckoutAddressForm => ({ + firstname: '', + lastname: '', + street: '', + apartment: '', + city: '', + region: '', + country_code: '', + postcode: '', + telephone: '', +}); + +/** + * Try to find an address from the user's saved addresses that exactly matches the address that is bound to a cart. + * + * `useShipping().save()``sends an addressId to Magento to set the shipping address on the cart, + * but when you download the cart after that - the cart's endpoint response doesn't contain that addressId, just the address fields (street etc.) + * So the only choice left is to try to compare the fields of the addresses. + * + * This function exists because if a user returns to a cart whose shipping address was set before, we want the user address to be highlighted in the SfAddressPicker component. + * + * @param customerAddresses The addresses saved in a user's account + * @param cartAddress The address that is bound to the cart, @see Cart["billing_address"] Cart["shipping_addresses"] + * + */ +export const findUserAddressIdenticalToSavedCartAddress = ( + customerAddresses: CustomerAddress[] | null, + cartAddress: CartAddressInterface, +) : CustomerAddress => customerAddresses?.find( + (userAddress) => isEqual(addressFromApiToForm(userAddress), addressFromApiToForm(cartAddress)), +) ?? null; diff --git a/helpers/checkout/getShippingMethodPrice.ts b/helpers/checkout/getShippingMethodPrice.ts index b87136c..da23bf7 100644 --- a/helpers/checkout/getShippingMethodPrice.ts +++ b/helpers/checkout/getShippingMethodPrice.ts @@ -1,6 +1,6 @@ -import { ShippingMethod } from '@vue-storefront/magento-api'; +import { AvailableShippingMethod } from '~/modules/GraphQL/types'; -export default (shippingMethod: ShippingMethod) => { +export default (shippingMethod: AvailableShippingMethod) => { const value = shippingMethod?.amount?.value; const priceWithTax = shippingMethod?.price_incl_tax?.value; diff --git a/helpers/checkout/steps.ts b/helpers/checkout/steps.ts new file mode 100644 index 0000000..9430530 --- /dev/null +++ b/helpers/checkout/steps.ts @@ -0,0 +1,6 @@ +import { getItem } from '~/helpers/asyncLocalStorage'; + +export const isPreviousStepValid = async (stepToValidate: string) => { + const checkout = await getItem('checkout'); + return !(!checkout || !checkout[stepToValidate]); +}; diff --git a/helpers/formatCurrency.ts b/helpers/formatCurrency.ts new file mode 100644 index 0000000..65cbc24 --- /dev/null +++ b/helpers/formatCurrency.ts @@ -0,0 +1,11 @@ +const formatCurrency = (value: number | string, locale: string, options: Intl.NumberFormatOptions): string => { + if (typeof value === 'string') { + // eslint-disable-next-line no-param-reassign + value = Number(value); + } + // eslint-disable-next-line no-param-reassign + + return new Intl.NumberFormat(locale, { style: 'currency', ...options }).format(value); +}; + +export default formatCurrency; diff --git a/helpers/getMetaInfo.ts b/helpers/getMetaInfo.ts new file mode 100644 index 0000000..3816aa5 --- /dev/null +++ b/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/helpers/hooks/getInstance.ts b/helpers/hooks/getInstance.ts index 6c4f64f..83c58e1 100644 --- a/helpers/hooks/getInstance.ts +++ b/helpers/hooks/getInstance.ts @@ -1,9 +1,9 @@ -import { getCurrentInstance } from '@vue/composition-api'; +import { getCurrentInstance } from '@nuxtjs/composition-api'; export const getInstance = () => { const vm = getCurrentInstance(); - if (vm) return vm.$root; + if (vm) return vm.root; throw new ReferenceError('[vue-hooks] Not found vue instance.'); }; diff --git a/helpers/hooks/useVueRouter.ts b/helpers/hooks/useVueRouter.ts deleted file mode 100644 index 09c52e0..0000000 --- a/helpers/hooks/useVueRouter.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* istanbul ignore file */ -import { reactive, watch } from '@vue/composition-api'; -import { getInstance } from '~/helpers/hooks/getInstance'; - -export const useVueRouter = () => { - const vm = getInstance(); - const state = reactive<{ route: any }>({ route: vm.$route }); - - const defineRoute = (r: any) => { state.route = r; }; - - watch(() => vm.$route, defineRoute); - - return { - ...state, - router: vm.$router, - }; -}; diff --git a/helpers/hooks/usei18n.ts b/helpers/hooks/usei18n.ts index 81a7f13..c2f012a 100644 --- a/helpers/hooks/usei18n.ts +++ b/helpers/hooks/usei18n.ts @@ -3,5 +3,5 @@ import { getInstance } from './getInstance'; export const useI18n = () => { const vm = getInstance(); - return vm.$i18n; + return vm.proxy.$i18n; }; diff --git a/helpers/htmlDecoder.ts b/helpers/htmlDecoder.ts new file mode 100644 index 0000000..600c80f --- /dev/null +++ b/helpers/htmlDecoder.ts @@ -0,0 +1,13 @@ +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/helpers/integrationPlugin/_proxyUtils.ts b/helpers/integrationPlugin/_proxyUtils.ts new file mode 100644 index 0000000..54e970f --- /dev/null +++ b/helpers/integrationPlugin/_proxyUtils.ts @@ -0,0 +1,39 @@ +import { Context as NuxtContext } from '@nuxt/types'; +import { merge } from 'lodash-es'; + +export type ApiClientMethod = (...args: any) => Promise; + +interface CreateProxiedApiParams { + givenApi: Record; + client: any; + tag: string; +} + +export const createProxiedApi = ({ givenApi, client, tag }: CreateProxiedApiParams) => new Proxy(givenApi, { + get: (target, prop, receiver) => { + const functionName = String(prop); + if (Reflect.has(target, functionName)) { + return Reflect.get(target, prop, receiver); + } + + // eslint-disable-next-line @typescript-eslint/require-await + return async (...args) => client + .post(`/${tag}/${functionName}`, args) + .then((r) => r.data); + }, +}); + +export const getCookies = (context: NuxtContext) => context?.req?.headers?.cookie ?? ''; + +export const getIntegrationConfig = (context: NuxtContext, configuration: any) => { + const cookie = getCookies(context); + const initialConfig = merge({ + axios: { + headers: { + ...(cookie ? { cookie } : {}), + }, + }, + }, configuration); + + return initialConfig; +}; diff --git a/helpers/integrationPlugin/context.ts b/helpers/integrationPlugin/context.ts new file mode 100644 index 0000000..7ac6bbe --- /dev/null +++ b/helpers/integrationPlugin/context.ts @@ -0,0 +1,37 @@ +/* eslint-disable no-param-reassign */ + +import { Context as NuxtContext } from '@nuxt/types'; +import { Inject } from '@nuxt/types/app'; + +type Argument = { tag: string, nuxtCtx: NuxtContext, inject: Inject }; + +/** + * It extends given integartion, defined by `tag` in the context. + */ +export const createExtendIntegrationInCtx = ({ tag, nuxtCtx, inject } : Argument) => (integrationProperties: Record) => { + const integrationKey = `$${tag}`; + + if (!nuxtCtx.$vsf || !(nuxtCtx.$vsf as Record)[integrationKey]) { + inject('vsf', { [integrationKey]: {} }); + } + + Object.keys(integrationProperties) + .filter((k) => !['api', 'client', 'config'].includes(k)) + .forEach((key) => { + (nuxtCtx.$vsf as Record)[integrationKey][key] = integrationProperties[key]; + }); +}; + +/** + * It creates a function that adds an integration to the context under the given name, defined by `tag`. + */ +export const createAddIntegrationToCtx = ({ tag, nuxtCtx, inject } : Argument) => (integrationProperties: Record) => { + const integrationKey = `$${tag}`; + + if (nuxtCtx.$vsf && !(nuxtCtx.$vsf as Record)[integrationKey]) { + (nuxtCtx.$vsf as Record)[integrationKey] = integrationProperties; + return; + } + + inject('vsf', { [integrationKey]: integrationProperties }); +}; diff --git a/helpers/integrationPlugin/index.ts b/helpers/integrationPlugin/index.ts new file mode 100644 index 0000000..90c408f --- /dev/null +++ b/helpers/integrationPlugin/index.ts @@ -0,0 +1,61 @@ +import { Context as NuxtContext } from '@nuxt/types'; +import { Inject } from '@nuxt/types/app'; +import axios from 'axios'; +import { createExtendIntegrationInCtx, createAddIntegrationToCtx } from './context'; +import { getIntegrationConfig, createProxiedApi, ApiClientMethod } from './_proxyUtils'; + +interface IntegrationContext { + integration: { + configure: (tag: string, configuration: any) => void; + extend: (tag: string, integrationProperties: any) => void; + } +} + +type NuxtPluginWithIntegration = (ctx: NuxtContext & IntegrationContext, inject: Inject) => void | Promise; + +const parseCookies = (cookieString: string): Record => Object.fromEntries(cookieString + .split(';') + // eslint-disable-next-line unicorn/no-array-callback-reference + .filter(String) + .map((item) => item.split('=').map((part) => part.trim())) + .map(([name, value]) => [name, value])); + +const setCookieValues = (cookieValues: Record, cookieString = '') => { + const parsed = parseCookies(cookieString); + + // eslint-disable-next-line no-return-assign + Object.entries(cookieValues).forEach(([name, value]) => parsed[name] = value); + + return Object.entries(parsed).map(([name, value]) => `${name}=${value}`).join('; '); +}; + +export const integrationPlugin = (pluginFn: NuxtPluginWithIntegration) => (nuxtCtx: NuxtContext, inject: Inject) => { + const configure = (tag: string, configuration: { api: Record }) => { + const injectInContext = createAddIntegrationToCtx({ tag, nuxtCtx, inject }); + const config = getIntegrationConfig(nuxtCtx, configuration); + const { middlewareUrl } = (nuxtCtx as any).$config; + + if (middlewareUrl) { + config.axios.baseURL = middlewareUrl; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const client = axios.create(config.axios); + const api = createProxiedApi({ givenApi: configuration.api || {}, client, tag }); + + if ((nuxtCtx.app.i18n as any).cookieValues) { + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + client.defaults.headers.cookie = setCookieValues((nuxtCtx.app.i18n as any).cookieValues, (client.defaults.headers as any).cookie); + } + injectInContext({ api, client, config }); + }; + + const extend = (tag: string, integrationProperties: Record) => { + createExtendIntegrationInCtx({ tag, nuxtCtx, inject })(integrationProperties); + }; + + const integration = { configure, extend }; + + pluginFn({ ...nuxtCtx, integration }, inject); +}; diff --git a/helpers/logger/index.ts b/helpers/logger/index.ts new file mode 100644 index 0000000..240648e --- /dev/null +++ b/helpers/logger/index.ts @@ -0,0 +1,4 @@ +import { getLoggerWithVerbosity, getVerbosity } from './verbosity'; + +const verbosity = getVerbosity(process.env.NODE_ENV); +export const Logger = getLoggerWithVerbosity(verbosity); diff --git a/helpers/logger/style.ts b/helpers/logger/style.ts new file mode 100644 index 0000000..a8e23e2 --- /dev/null +++ b/helpers/logger/style.ts @@ -0,0 +1,61 @@ +import type { LogEntryVariant } from './verbosity'; + +const createLogEntryVariantStyle = (backgroundColor: string, textColor: string) : string => ` + padding: 2px; + border-radius: 0 2px 2px 0; + background: ${backgroundColor}; + color: ${textColor}; +`; + +const colors = { + white: '#fff', + black: '#000', + + // Storefront UI colors + success: '#5ece7b', + danger: '#d12727', + warning: '#ecc713', + info: '#0468db', +} as const; + +const defaultStyle = createLogEntryVariantStyle(colors.success, colors.white); + +const logEntryVariantProperties : Record = { + error: { + prefixText: '[error]', + style: createLogEntryVariantStyle(colors.danger, colors.white), + }, + warn: { + prefixText: '[warn]', + style: createLogEntryVariantStyle(colors.warning, colors.black), + }, + info: { + prefixText: '[info]', + style: createLogEntryVariantStyle(colors.info, colors.white), + }, + debug: { + prefixText: '[debug]', + style: defaultStyle, + }, + none: { + prefixText: '', + style: defaultStyle, + }, +}; + +const isNode: boolean = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]' + || process.env.APPLICATION_ENV === 'production'; + +export const getStyledConsolePrefix = (logEntryVariant: LogEntryVariant) => { + const { prefixText, style } = logEntryVariantProperties[logEntryVariant]; + const prefix = `[VSF]${prefixText}`; + + const nodeStyle = [`${prefix}: `]; + const browserStyle = [ + `%c${prefix}%c:`, + style, + 'background: transparent;', + ]; + + return isNode ? nodeStyle : browserStyle; +}; diff --git a/helpers/logger/verbosity.ts b/helpers/logger/verbosity.ts new file mode 100644 index 0000000..57157f7 --- /dev/null +++ b/helpers/logger/verbosity.ts @@ -0,0 +1,43 @@ +import { getStyledConsolePrefix } from './style'; + +export type LogEntryVariant = 'error' | 'warn' | 'info' | 'debug' | 'none'; + +const partial = (fn: Function, ...args: unknown[]) => (...laterArgs: unknown[]) => fn(...args, ...laterArgs); + +export const getLoggerWithVerbosity = (verbosity: LogEntryVariant) => { + const noOperation = () => {}; + const matches = (verbosities: LogEntryVariant[]) => verbosities.includes(verbosity); + return { + debug: matches(['debug']) + ? partial(console.debug, ...getStyledConsolePrefix('debug')) + : noOperation, + + info: matches(['info', 'debug']) + ? partial(console.info, ...getStyledConsolePrefix('info')) + : noOperation, + + warn: matches(['info', 'warn', 'error']) + ? partial(console.warn, ...getStyledConsolePrefix('warn')) + : noOperation, + + error: matches(['info', 'warn', 'debug', 'error']) + ? partial(console.error, ...getStyledConsolePrefix('error')) + : noOperation, + }; +}; + +export const getVerbosity = (nodeEnv: string) : LogEntryVariant => { + const defaultModes : Record = { + // Test + test: 'none', + + // Development + dev: 'debug', + development: 'debug', + + // Production + prod: 'error', + production: 'error', + }; + return defaultModes[nodeEnv] ?? 'warn'; +}; diff --git a/helpers/product/productData.ts b/helpers/product/productData.ts deleted file mode 100644 index d5587c2..0000000 --- a/helpers/product/productData.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { computed } from '@vue/composition-api'; -import { productGetters, useProduct } from '@vue-storefront/magento'; -import { useVueRouter } from '~/helpers/hooks/useVueRouter'; - -export const productData = () => { - const { route } = useVueRouter(); - const { id } = route.params; - - const { products, loading } = useProduct(`product-${id}`); - - return { - id, - loading, - product: computed(() => { - const baseProduct = Array.isArray(products.value?.items) && products.value?.items[0] ? products.value?.items[0] : []; - // @ts-ignore - return productGetters.getFiltered(baseProduct, { - master: true, - attributes: route.query, - }); - }), - }; -}; diff --git a/helpers/route/useRoute.ts b/helpers/route/useRoute.ts deleted file mode 100644 index 8bececf..0000000 --- a/helpers/route/useRoute.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - useUrlResolver, -} from '@vue-storefront/magento'; -import { useVueRouter } from '~/helpers/hooks/useVueRouter'; - -export const useRoute = (context) => { - const { route: { path } } = useVueRouter(); - - const { - search, - result, - loading, - } = useUrlResolver(`router:${path}`); - - return { - path, - search: async () => { - await search(path); - if (!result?.value) context.root.$nuxt.error({ statusCode: 404 }); - }, - result, - loading, - }; -}; diff --git a/jest-setup.js b/jest-setup.js new file mode 100644 index 0000000..b30310b --- /dev/null +++ b/jest-setup.js @@ -0,0 +1,50 @@ +import '@testing-library/jest-dom'; +import Vue from 'vue'; +import { config } from '@vue/test-utils'; + +config.stubs = { + NuxtImg: { render(h) { return h('img'); } }, +}; +config.mocks = { + $t: (text) => text, + $fc: (text) => text, + localePath: (text) => text, + localeRouter: (route) => route, +}; + +const $vsf = { + $magento: { + config: { + imageProvider: '', + magentoBaseUrl: '', + state: { + getMessage: jest.fn(), + }, + }, + }, +}; + +// mocks object returned by useContext() +Vue.prototype.$nuxt = { + context: { + $vsf, + $fc: jest.fn((label) => label), + localeRoute: jest.fn((route) => route), + localePath: jest.fn((link) => link), + app: { + // $vsf intentionally doubled in context top level AND in context.app - this is the way it's in the app + $vsf, + context: { + $vsf, + }, + $fc: jest.fn((label) => label), + localePath: jest.fn((link) => link), + localeRoute: jest.fn((path) => path), + }, + i18n: { + t: jest.fn((label) => label), + }, + }, +}; + +Vue.directive('e2e', {}); diff --git a/jest.config.js b/jest.config.js index 555d456..35b25dd 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,44 +1,35 @@ -'use strict' +/* eslint-disable unicorn/prefer-module */ module.exports = { - globals: { - __DEV__: true, - }, - // noStackTrace: true, - // bail: true, - // cache: false, - // verbose: true, - // watch: true, + globals: { __DEV__: true }, + coverageReporters: ['lcov'], - coverageThreshold: { - global: { - // branches: 50, - // functions: 50, - // lines: 50, - // statements: 50 - }, - }, + coverageThreshold: { global: {} }, coveragePathIgnorePatterns: ['/node_modules/', '.d.ts$', '/__mocks__/'], - collectCoverage: true, - testEnvironment: 'jest-environment-jsdom-sixteen', + + coverageDirectory: './coverage/', + moduleNameMapper: { '^@/(.*)$': '/$1', '^~/(.*)$': '/$1', - '^vue$': 'vue/dist/vue.common.js' + '^vue$': 'vue/dist/vue.common.js', }, - moduleFileExtensions: ['js', 'vue', 'json'], + + testEnvironment: 'jsdom', + transform: { '^.+\\.(ts)$': 'ts-jest', '^.+\\.js$': 'babel-jest', - '.*\\.(vue)$': 'vue-jest' + '^.+\\.vue$': 'vue-jest', + '^.+\\.(css|svg)': 'jest-transform-stub', }, - coverageDirectory: './coverage/', - collectCoverageFrom: [ '/components/**/*.vue', - '/pages/**/*.vue' + '/pages/**/*.vue', + '/middleware/**/*.js', + '/plugins/**/*.js', ], setupFiles: [ @@ -46,9 +37,10 @@ module.exports = { 'jest-localstorage-mock', ], + setupFilesAfterEnv: ['/jest-setup.js'], + transformIgnorePatterns: [ - 'node_modules', - '/node_modules', + 'node_modules/(?!(@storefront-ui)|vee-validate/dist/rules|nouislider|lodash-es)', ], testMatch: ['/**/__tests__/**/*spec.[jt]s?(x)'], @@ -61,4 +53,10 @@ module.exports = { ['jest-watch-toggle-config', { setting: 'notify' }], ['jest-watch-toggle-config', { setting: 'bail' }], ], + + collectCoverage: false, + + moduleFileExtensions: ['js', 'vue', 'json', 'ts'], + + modulePathIgnorePatterns: ['_theme', 'tests/e2e'], }; diff --git a/lang/de.js b/lang/de.js index fa9688f..b436c8d 100644 --- a/lang/de.js +++ b/lang/de.js @@ -1,158 +1,311 @@ /* eslint-disable */ export default { - 'Categories': 'Kategorien', - 'Filters': 'Filters', - 'Sort by': 'Sortieren nach', - 'Products found': 'Produkte gefunden', - 'About us': 'Über uns', - 'Who we are': 'Wer wir sind', - 'Quality in the details': 'Qualität im Detail', - 'Customer Reviews': 'Kundenbewertungen', - 'Departments': 'Abteilungen', - 'Women fashion': 'Damenmode', - 'Men fashion': 'Herrenmode', - 'Kidswear': 'Kinderkleidung', - 'Home': 'Zuhause', - 'Help': 'Hilfe', - 'Customer service': 'Kundendienst', - 'Size guide': 'Größentabelle', - 'Contact us': 'Kontaktiere uns', - 'Payment & Delivery': 'Zahlung & Lieferung', - 'Purchase terms': 'Kaufbedingungen', - 'Guarantee': 'Garantie', - 'Description': 'Beschreibung', - 'Read reviews': 'Bewertungen lesen', - 'Additional Information': 'Zusätzliche Information', - 'Save for later': 'Für später speichern', - 'Add to compare': 'Hinzufügen zum vergleichen', - 'Match it with': 'Kombiniere es mit', - 'Share your look': 'Teile deinen Look', - 'Product description': 'Das Karissa V-Neck Tee hat eine halb taillierte Form schmeichelhaft für jede Figur. Sie können mit ins Fitnessstudio gehen Vertrauen, während es Kurven umarmt und häufiges "Problem" verbirgt Bereiche. Finden Sie atemberaubende Cocktailkleider für Frauen und feiern Sie Kleider.', - 'Brand': 'Marke', - 'Instruction1': 'Um mich kümmern', - 'Instruction2': 'Nur hier für die Pflegehinweise?', - 'Instruction3': 'Ja, das haben wir uns gedacht', - 'Items': 'Gegenstände', - 'View': 'Ansicht', - 'Show on page': 'Auf Seite anzeigen', - 'Done': 'Fertig', - 'Clear all': 'Alles löschen', - 'Empty': 'Sieht so aus, als hätten Sie der Tasche noch keine Artikel hinzugefügt. Beginnen Sie mit dem Einkaufen, um es auszufüllen.', - 'Help & FAQs': 'Hilfe & FAQs', - 'Download': 'Laden Sie unsere Anwendung herunter', - 'Find out more': 'Finde mehr heraus', - 'Login': 'Anmeldung', - 'Forgotten password?': 'Passwort vergessen?', - 'No account': `Sie haben noch keinen Account?`, - 'Register today': 'Melde dich noch heute an', - 'Go to checkout': 'Zur Kasse gehen', - 'Go back shopping': 'Zurück einkaufen', - 'Personal details': 'Persönliche Daten', - 'Edit': 'Bearbeiten', - 'Shipping details': 'Versanddetails', - 'Billing address': 'Rechnungsadresse', - 'Same as shipping address': 'Wie Versandadresse', - 'Payment method': 'Zahlungsmethode', - 'Apply': 'Übernehmen', - 'Update password': 'Passwort aktualisieren', - 'Update personal data': 'Persönliche Daten aktualisieren', - 'Item': 'Artikel', - 'Go back': 'Go back', - 'Continue to shipping': 'Weiter zum Versand', - 'I agree to': 'Ich stimme zu', - 'Terms and conditions': 'Allgemeine Geschäftsbedingungen', - 'Pay for order': 'Für Bestellung bezahlen', - 'Log into your account': 'In dein Konto einloggen', - 'or fill the details below': 'oder füllen Sie die Details unten', - 'Enjoy your free account': 'Enjoy these perks with your free account!', - 'Continue to payment': 'Weiter zur Zahlung', - 'Order No.': 'Bestellnummer', - 'Successful placed order': 'Sie haben die Bestellung erfolgreich aufgegeben. Sie können den Status Ihres Bestellen Sie über unsere Lieferstatusfunktion. Sie erhalten eine Bestellung Bestätigungs-E-Mail mit Details Ihrer Bestellung und einem Link zum Verfolgen der Bestellung Fortschritt.', - 'Info after order': 'Sie können sich mit E-Mail und definiertem Passwort in Ihrem Konto anmelden vorhin. Überprüfen Sie in Ihrem Konto Ihre Profildaten Transaktionsverlauf, Abonnement für Newsletter bearbeiten.', - 'Allow order notifications': 'Bestellbenachrichtigungen zulassen', - 'Feedback': 'Ihr Feedback ist uns wichtig. Lassen Sie uns wissen, was wir verbessern können.', - 'Send my feedback': 'Senden Sie mein Feedback', - 'Go back to shop': 'Zurück zum Einkaufen', - 'Read all reviews': 'Alle Bewertungen lesen', - 'Color': 'Farbe', - 'Contact details updated': 'Halten Sie Ihre Adressen und Kontaktdaten auf dem neuesten Stand.', - 'Manage billing addresses': 'Alle gewünschten Rechnungsadressen verwalten (Arbeitsplatz, Privatadresse ...) Auf diese Weise müssen Sie die Rechnungsadresse nicht bei jeder Bestellung manuell eingeben.', - 'Change': 'Änderungsänderung', - 'Delete': 'Löschen', - 'Add new address': 'Neue Adresse hinzufügen', - 'Set up newsletter': 'Richten Sie Ihren Newsletter ein und wir senden Ihnen wöchentlich Informationen zu neuen Produkten und Trends aus den von Ihnen ausgewählten Bereichen', - 'Sections that interest you': 'Abschnitte, die Sie interessieren', - 'Save changes': 'Änderungen speichern', - 'Read and understand': 'Ich habe das gelesen und verstanden', - 'Privacy': 'Datenschutz', - 'Cookies Policy': 'Cookie-Richtlinie', - 'Commercial information': 'und erklären sich damit einverstanden, personalisierte Handelsinformationen vom Markennamen per E-Mail zu erhalten', - 'Feel free to edit': 'Fühlen Sie sich frei, Ihre unten stehenden Daten zu bearbeiten, damit Ihr Konto immer auf dem neuesten Stand ist', - 'Use your personal data': 'Bei Markennamen legen wir großen Wert auf Datenschutzfragen und verpflichten uns, die persönlichen Daten unserer Benutzer zu schützen. Erfahren Sie mehr darüber, wie wir Ihre persönlichen Daten pflegen und verwenden', - 'Privacy Policy': 'Datenschutzrichtlinie', - 'Change password your account': 'Wenn Sie das Passwort ändern möchten, um auf Ihr Konto zuzugreifen, geben Sie die folgenden Informationen ein', - 'Your current email address is': 'Ihre aktuelle E-Mail-Adresse lautet', - 'Product': 'Produkt', - 'Details and status orders': 'Überprüfen Sie die Details und den Status Ihrer Bestellungen im Online-Shop. Sie können Ihre Bestellung auch stornieren oder eine Rücksendung anfordern. ', - 'You currently have no orders': 'Sie haben derzeit keine Bestellungen', - 'Start shopping': 'Einkaufen starten', - 'Download': 'Herunterladen', - 'Download all': 'Alle herunterladen', - 'View details': 'Details anzeigen', - 'Manage shipping addresses': 'Alle gewünschten Versandadressen verwalten (Arbeitsplatz, Privatadresse ...) Auf diese Weise müssen Sie die Versandadresse nicht bei jeder Bestellung manuell eingeben.', - 'Quantity': 'Menge', - 'Price': 'Preis', - 'Back to homepage': 'Zurück zur Homepage', - 'Select shipping method': 'Versandart auswählen', - 'Review my order': 'Meine Bestellung überprüfen', - 'Select payment method': 'Zahlungsmethode auswählen', - 'Make an order': 'Bestellung aufgeben', - 'or': 'oder', - 'login in to your account': 'Anmelden bei Ihrem Konto', - 'Create an account': 'Konto erstellen', - 'Your bag is empty': 'Ihre Tasche ist leer', - 'Cancel': 'Abbrechen', - 'See all results': 'Alle Ergebnisse anzeigen', - 'We haven’t found any results for given phrase': 'Wir haben keine Ergebnisse für die angegebene Phrase gefunden', - 'You haven’t searched for items yet': 'Sie haben noch nicht nach Artikeln gesucht.', - 'Let’s start now – we’ll help you': 'Fangen wir jetzt an - wir helfen Ihnen.', - 'Search results': 'Suchergebnisse', - 'Product suggestions': 'Produktvorschläge', - 'Search for items': 'Nach Artikeln suchen', - 'Enter promo code': 'Geben Sie den Promo-Code ein', - 'Shipping method': 'Versandart', - 'Continue to billing': 'Weiter zur Abrechnung', - 'Payment methods': 'Zahlungsmethoden', - 'Shipping address': 'Lieferanschrift', - 'Subtotal': 'Zwischensumme', - 'Shipping': 'Versand', - 'Total price': 'Gesamtpreis', - 'Payment': 'Zahlung', - 'Order summary': 'Bestellübersicht', - 'Products': 'Produkte', - 'Total': 'Gesamt', - 'Reset Password': 'Passwort Zurücksetzen', - 'Save Password': 'Passwort Speichern', - 'Back to home': 'Zurück Zur Startseite', - 'Forgot Password': 'Wenn Sie Ihr Passwort vergessen haben, können Sie es zurücksetzen.', - 'Thank You Inbox': 'Wenn die Nachricht nicht in Ihrem Posteingang ankommt, versuchen Sie es mit einer anderen E-Mail-Adresse, mit der Sie sich möglicherweise registriert haben.', - 'Sign in': 'Einloggen', - 'Register': 'Registrieren', - 'Password Changed': 'Passwort erfolgreich geändert. Sie können nun zur Startseite zurückkehren und sich anmelden.', - 'Password': 'Passwort', - 'Repeat Password': 'Wiederhole das Passwort', - 'Forgot Password Modal Email': 'E-Mail, mit der Sie sich anmelden:', - forgotPasswordConfirmation: 'Vielen Dank! Wenn ein Konto mit der E-Mail-Adresse {0} registriert ist, finden Sie in Ihrem Posteingang eine Nachricht mit einem Link zum Zurücksetzen des Passworts.', - subscribeToNewsletterModalContent: - 'Wenn Sie sich für den Newsletter angemeldet haben, erhalten Sie spezielle Angebote und Nachrichten von VSF per E-Mail. Wir werden Ihre E-Mail zu keinem Zeitpunkt an Dritte verkaufen oder weitergeben. Bitte beachten Sie unsere {0}.', - 'Subscribe': 'Abonnieren', - 'Subscribe to newsletter': 'Anmeldung zum Newsletter', - 'Email address': 'E-Mail Adresse', - 'I confirm subscription': 'Ich bestätige das Abonnement', - 'You can unsubscribe at any time': 'Sie können sich jederzeit abmelden', - 'show more': 'mehr anzeigen', - 'hide': 'ausblenden', - 'Change to grid view': 'Zur Rasteransicht wechseln', - 'Change to list view': 'Zur Listenansicht wechseln' + "About us": "Über uns", + "Account": "Konto", + "Add new address": "Neue Adresse hinzufügen", + "Add to compare": "Hinzufügen zum vergleichen", + "Add to Wishlist": "Zur Wunschliste hinzufügen", + "Additional Information": "Zusätzliche Information", + "All Orders": "Alle Bestellungen", + "Allow order notifications": "Bestellbenachrichtigungen zulassen", + "Apply": "Übernehmen", + "Applied Coupon": "Angewendeter Gutschein", + "Attention!": "Attention!", + "Back to home": "Zurück Zur Startseite", + "Back to homepage": "Zurück zur Homepage", + "Billing": "Abrechnung", + "Billing address": "Rechnungsadresse", + "Brand": "Marke", + "Cancel": "Abbrechen", + "Cart": "Warenkorb", + "Categories": "Kategorien", + "Change": "Änderungsänderung", + "Change password your account": "Wenn Sie das Passwort ändern möchten, um auf Ihr Konto zuzugreifen, geben Sie die folgenden Informationen ein", + "Change to grid view": "Zur Rasteransicht wechseln", + "Change to list view": "Zur Listenansicht wechseln", + "Clear all": "Alles löschen", + "Color": "Farbe", + "Commercial information": "und erklären sich damit einverstanden, personalisierte Handelsinformationen vom Markennamen per E-Mail zu erhalten", + "Contact details updated": "Halten Sie Ihre Adressen und Kontaktdaten auf dem neuesten Stand.", + "Contact us": "Kontaktiere uns", + "Continue to billing": "Weiter zur Abrechnung", + "Continue to payment": "Weiter zur Zahlung", + "Continue to shipping": "Weiter zum Versand", + "Cookies Policy": "Cookie-Richtlinie", + "Create an account": "Konto erstellen", + "Customer Reviews": "Kundenbewertungen", + "Customer service": "Kundendienst", + "Date": "Datum", + "Default Billing Address": "Standard-Rechnungsadresse", + "Default Shipping Address": "Standardlieferadresse", + "Delete": "Löschen", + "Departments": "Abteilungen", + "Description": "Beschreibung", + "Details and status orders": "Überprüfen Sie die Details und den Status Ihrer Bestellungen im Online-Shop. Sie können Ihre Bestellung auch stornieren oder eine Rücksendung anfordern. ", + "Discount": "Rabatt", + "Done": "Fertig", + "Download": "Herunterladen", + "Download all": "Alle herunterladen", + "Edit": "Bearbeiten", + "Email address": "E-Mail Adresse", + "Empty": "Sieht so aus, als hätten Sie der Tasche noch keine Artikel hinzugefügt. Beginnen Sie mit dem Einkaufen, um es auszufüllen.", + "Empty bag": "Leere Tasche", + "Enjoy your free account": "Enjoy these perks with your free account!", + "Enter promo code": "Geben Sie den Promo-Code ein", + "Feedback": "Ihr Feedback ist uns wichtig. Lassen Sie uns wissen, was wir verbessern können.", + "Feel free to edit": "Fühlen Sie sich frei, Ihre unten stehenden Daten zu bearbeiten, damit Ihr Konto immer auf dem neuesten Stand ist", + "Filters": "Filter", + "Find out more": "Finde mehr heraus", + "First Name": "Vorname", + "Forgot Password": "Wenn Sie Ihr Passwort vergessen haben, können Sie es zurücksetzen.", + "Forgot Password Modal Email": "E-Mail, mit der Sie sich anmelden:", + "forgotPasswordConfirmation": "Vielen Dank! Wenn ein Konto mit der E-Mail-Adresse {0} registriert ist, finden Sie in Ihrem Posteingang eine Nachricht mit einem Link zum Zurücksetzen des Passworts.", + "Forgotten password?": "Passwort vergessen?", + "Go back": "Geh zurück", + "Go back shopping": "Zurück einkaufen", + "Go back to shop": "Zurück zum Einkaufen", + "Go to checkout": "Zur Kasse gehen", + "Go to cart": "Zur Warenkorb gehen", + "Guarantee": "Garantie", + "Help": "Hilfe", + "Help & FAQs": "Hilfe & FAQs", + "hide": "ausblenden", + "Home": "Startseite", + "I agree to": "Ich stimme zu", + "I confirm subscription": "Ich bestätige das Abonnement", + "I want to create an account": "Ich möchte ein Konto erstellen", + "Info after order": "Sie können sich mit E-Mail und definiertem Passwort in Ihrem Konto anmelden vorhin. Überprüfen Sie in Ihrem Konto Ihre Profildaten Transaktionsverlauf, Abonnement für Newsletter bearbeiten.", + "Instruction1": "Um mich kümmern", + "Instruction2": "Nur hier für die Pflegehinweise?", + "Instruction3": "Ja, das haben wir uns gedacht", + "It was not possible to request a new password, please check the entered email address.": "Es war nicht möglich, ein neues Passwort anzufordern, bitte überprüfen Sie die eingegebene E-Mail-Adresse.", + "Item": "Artikel", + "Items": "Gegenstände", + "Kidswear": "Kinderkleidung", + "Last Name": "Nachname", + "Let’s start now – we’ll help you": "Fangen wir jetzt an - wir helfen Ihnen.", + "Log into your account": "In dein Konto einloggen", + "Login": "Anmeldung", + "login in to your account": "Anmelden bei Ihrem Konto", + "Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.": "Sieht so aus, als hätten Sie der Tasche noch keine Artikel hinzugefügt. Beginnen Sie mit dem Einkaufen, um es auszufüllen.", + "Looks like you haven’t added any items to the Wishlist.": "Sieht so aus, als hätten Sie keine Artikel zur Wunschliste hinzugefügt.", + "Make an order": "Bestellung aufgeben", + "Manage addresses": "Verwalten Sie alle gewünschten Adressen (Arbeitsplatz, Privatadresse...) Auf diese Weise müssen Sie die Adresse nicht bei jeder Bestellung manuell eingeben.", + "Manage billing addresses": "Alle gewünschten Rechnungsadressen verwalten (Arbeitsplatz, Privatadresse ...) Auf diese Weise müssen Sie die Rechnungsadresse nicht bei jeder Bestellung manuell eingeben.", + "Manage shipping addresses": "Alle gewünschten Versandadressen verwalten (Arbeitsplatz, Privatadresse ...) Auf diese Weise müssen Sie die Versandadresse nicht bei jeder Bestellung manuell eingeben.", + "Match it with": "Kombiniere es mit", + "Men fashion": "Herrenmode", + "Menu": "Menü", + "My billing and shipping address are the same": "Meine Rechnungs- und Lieferadresse sind identisch", + "My Cart": "Mein Warenkorb", + "New Products": "Neue Produkte", + "No account": "Sie haben noch keinen Account?", + "or": "oder", + "or fill the details below": "oder füllen Sie die Details unten", + "Order ID": "Bestellung ID", + "Order information": "Bestellinformationen", + "Order No.": "Bestellnummer", + "Order summary": "Bestellübersicht", + "Other products you might like": "Andere Produkte, die Ihnen gefallen könnten", + "Out of stock": "Ausverkauft", + "Password": "Passwort", + "Password Changed": "Passwort erfolgreich geändert. Sie können nun zur Startseite zurückkehren und sich anmelden.", + "Pay for order": "Für Bestellung bezahlen", + "Payment": "Zahlung", + "Payment & Delivery": "Zahlung & Lieferung", + "Payment Method": "Zahlungsmethode", + "Payment Methods": "Zahlungsmethoden", + "Personal details": "Persönliche Daten", + "Please type your current password to change your email address.": "Bitte geben Sie Ihr aktuelles Passwort ein, um Ihre E-Mail-Adresse zu ändern.", + "Price": "Preis", + "Privacy": "Datenschutz", + "Privacy Policy": "Datenschutzrichtlinie", + "Product": "Produkt", + "Product description": "Das Karissa V-Neck Tee hat eine halb taillierte Form schmeichelhaft für jede Figur. Sie können mit ins Fitnessstudio gehen Vertrauen, während es Kurven umarmt und häufiges \"Problem\" verbirgt Bereiche. Finden Sie atemberaubende Cocktailkleider für Frauen und feiern Sie Kleider.", + "Product suggestions": "Produktvorschläge", + "Products": "Produkte", + "Products found": "Produkte gefunden", + "Purchase terms": "Kaufbedingungen", + "Quality in the details": "Qualität im Detail", + "Quantity": "Menge", + "Read all reviews": "Alle Bewertungen lesen", + "Read and understand": "Ich habe das gelesen und verstanden", + "Read reviews": "Bewertungen lesen", + "Register": "Registrieren", + "Register today": "Melde dich noch heute an", + "Remove": "Löschen", + "Remove Address": "Adresse entfernen", + "Remove from Wishlist": "Von Wunschliste entfernen", + "Repeat Password": "Wiederhole das Passwort", + "Reset Password": "Passwort Zurücksetzen", + "Review my order": "Meine Bestellung überprüfen", + "Same as shipping address": "Wie Versandadresse", + "Save changes": "Änderungen speichern", + "Save for later": "Für später speichern", + "Save Password": "Passwort Speichern", + "Search": "Suche", + "Search for items": "Nach Artikeln suchen", + "Search results": "Suchergebnisse", + "Sections that interest you": "Abschnitte, die Sie interessieren", + "See all": "Alle anzeigen", + "See all results": "Alle Ergebnisse anzeigen", + "See more": "Mehr sehen", + "Select payment method": "Zahlungsmethode auswählen", + "Select shipping method": "Versandart auswählen", + "Send my feedback": "Senden Sie mein Feedback", + "Set up newsletter": "Richten Sie Ihren Newsletter ein und wir senden Ihnen wöchentlich Informationen zu neuen Produkten und Trends aus den von Ihnen ausgewählten Bereichen", + "Share your look": "Teile deinen Look", + "Shipping": "Versand", + "Shipping address": "Lieferanschrift", + "Shipping details": "Versanddetails", + "Shipping method": "Versandart", + "Show":"Anzeigen", + "show more": "mehr anzeigen", + "Show on page": "Auf Seite anzeigen", + "Sign in": "Einloggen", + "Size guide": "Größentabelle", + "Sign Up for Newsletter": "Anmeldung für Newsletter", + "Sort by": "Sortieren nach", + "Sort: Default": "Standard", + "Sort: Name A-Z": "Benennen Sie A-Z", + "Sort: Name Z-A": "Benennen Sie Z-A", + "Sort: Price from high to low": "Preis von hoch bis niedrig", + "Sort: Price from low to high": "Preis von niedrig bis hoch", + "Start shopping": "Einkaufen starten", + "Status": "Status", + "Subscribe": "Abonnieren", + "Subscribe to newsletter": "Anmeldung zum Newsletter", + "subscribeToNewsletterModalContent": "Wenn Sie sich für den Newsletter angemeldet haben, erhalten Sie spezielle Angebote und Nachrichten von VSF per E-Mail. Wir werden Ihre E-Mail zu keinem Zeitpunkt an Dritte verkaufen oder weitergeben. Bitte beachten Sie unsere {0}.", + "Subtotal": "Zwischensumme", + "Subtotal price": "Zwischensumme Preis", + "Successful placed order": "Sie haben die Bestellung erfolgreich aufgegeben. Sie können den Status Ihres Bestellen Sie über unsere Lieferstatusfunktion. Sie erhalten eine Bestellung Bestätigungs-E-Mail mit Details Ihrer Bestellung und einem Link zum Verfolgen der Bestellung Fortschritt.", + "Terms and conditions": "Allgemeine Geschäftsbedingungen", + "Thank you": "Danke", + "Thank You Inbox": "Wenn die Nachricht nicht in Ihrem Posteingang ankommt, versuchen Sie es mit einer anderen E-Mail-Adresse, mit der Sie sich möglicherweise registriert haben.", + "Total": "Gesamt", + "Order Total": "Auftragssumme", + "Total items": "Gesamtanzahl", + "Total price": "Gesamtpreis", + "Update password": "Passwort aktualisieren", + "Update personal data": "Persönliche Daten aktualisieren", + "Use your personal data": "Bei Markennamen legen wir großen Wert auf Datenschutzfragen und verpflichten uns, die persönlichen Daten unserer Benutzer zu schützen. Erfahren Sie mehr darüber, wie wir Ihre persönlichen Daten pflegen und verwenden", + "User Account": "Benutzerkonto", + "View": "Ansicht", + "View details": "Details anzeigen", + "Vue Storefront Next": "Vue Storefront Next", + "We haven’t found any results for given phrase": "Wir haben keine Ergebnisse für die angegebene Phrase gefunden", + "Who we are": "Wer wir sind", + "Wishlist": "Wunschliste", + "Women fashion": "Damenmode", + "You added {product} to your shopping cart.": "Sie haben {product} zu Ihrem Warenkorb hinzugefügt.", + "You are not authorized, please log in": "Sie sind nicht autorisiert, bitte melden Sie sich an", + "You can unsubscribe at any time": "Sie können sich jederzeit abmelden", + "You currently have no orders": "Sie haben derzeit keine Bestellungen", + "The email field must be a valid email":"Das E-Mail-Feld muss eine gültige E-Mail-Adresse sein", + "You haven’t searched for items yet": "Sie haben noch nicht nach Artikeln gesucht.", + "Your bag is empty": "Ihre Tasche ist leer", + "Your current email address is": "Ihre aktuelle E-Mail-Adresse lautet", + "Your email": "Deine E-Mail", + "You have submitted no reviews": "Sie haben keine Bewertungen abgegeben", + "The account sign-in was incorrect or your account is disabled temporarily. Please wait and try again later.":"Die Kontoanmeldung war falsch oder Ihr Konto wurde vorübergehend deaktiviert. Bitte warten Sie und versuchen Sie es später erneut.", + "A customer with the same email address already exists in an associated website.": "Ein Kunde mit derselben E-Mail-Adresse existiert bereits auf einer verknüpften Website.", + "Invalid email": "Ungültige E-Mail", + "SUMMER COLLECTION {year}": "SOMMERKOLLEKTION {year}", + "Colorful summer dresses are already in store": "Bunte Sommerkleider sind bereits im Store", + "Learn more": "Mehr erfahren", + "Dresses": "Kleider", + "Cocktail & Party": "Cocktailparty", + "Linen Dresses": "Leinenkleider", + "T-Shirts": "T-Shirts", + "The Office Life": "Das Büroleben", + "Find stunning women's cocktail dresses and party dresses. Stand out in lace and metallic cocktail dresses from all your favorite brands.": "Finden Sie atemberaubende Cocktailkleider für Damen und Cocktailkleider für Party-D…c von all Ihren Lieblingsmarken.", + "Shop now": "Jetzt einkaufen", + "Summer Sandals": "Sommersandalen", + "Eco Sandals": "Öko-Sandalen", + "Subscribe to Newsletters": "Newsletter abonnieren", + "Be aware of upcoming sales and events. Receive gifts and special offers!": "Informieren Sie sich über bevorstehende Verkäufe und Veranstaltungen. Erhalten Sie Geschenke und Sonderangebote", + "Fashion to take away": "Mode zum Mitnehmen", + "Download our application to your mobile": "Laden Sie unsere Anwendung auf Ihr Handy herunter", + "Share Your Look": "Teilen Sie Ihren Look", + "My Account": "Mein Konto", + "My profile": "Mein Profil", + "Personal Details": "Persönliche Daten", + "Addresses details": "Adressendetails", + "My newsletter": "Mein Newsletter", + "Log out": "Ausloggen", + "My reviews": "Meine Bewertungen", + "Order history": "Bestellverlauf", + "Order details": "Bestelldetails", + "My wishlist": "Meine Wunschliste", + "Password change": "Passwortänderung", + "Personal data": "Persönliche Daten", + "Your e-mail": "Deine E-Mail", + "Current Password": "Jetziges Passwortd", + "You are not authorized, please log in.": "Sie sind nicht autorisiert, bitte melden Sie sich an.", + "Go To Product": "Zum Produkt", + "Returns":"Rücklauf", + "My orders": "Meine Bestellungen", + "Add the address": "Fügen Sie die Adresse hinzu", + "Set as default shipping": "Als Standardversand festlegen", + "Set as default billing": "Als Standardabrechnung festlegen", + "House/Apartment number": "Haus-/Wohnungsnummer", + "Street Name": "Straßenname", + "City": "Stadt", + "State/Province": "Staat/Provinz", + "Zip-code": "Postleitzahl", + "Country": "Land", + "Phone number": "Telefonnummer", + "Please select a country first": "Bitte wählen Sie zuerst ein Land aus", + "This field is required": "Dieses Feld ist erforderlich", + "The field should have at least 2 characters": "Das Feld sollte mindestens 2 Zeichen lang sein", + "The field should have at least 4 characters": "Das Feld sollte mindestens 4 Zeichen lang sein", + "The field should have at least 8 characters": "Das Feld sollte mindestens 8 Zeichen lang sein", + "New Password": "Neues Passwort", + "There are no shipping methods available for this country. We are sorry, please try with different country.": "Für dieses Land sind keine Versandarten verfügbar. Es tut uns leid, bitte versuchen Sie es mit einem anderen Land oder später.", + "There was some error while trying to fetch shipping methods. We are sorry, please try with different shipping details.": "Beim Versuch, Versandarten abzurufen, ist ein Fehler aufgetreten. Es tut uns leid, bitte versuchen Sie es mit anderen Versanddetails oder später.", + "There was some error while trying to select this shipping method. We are sorry, please try with different shipping method.": "Beim Versuch, diese Versandart auszuwählen, ist ein Fehler aufgetreten. Es tut uns leid, bitte versuchen Sie es mit einer anderen Versandart.", + "We can't find products matching the selection.":"Wir können keine Produkte finden, die der Auswahl entsprechen.", + 'Page not found': 'Seite nicht gefunden', + 'Back to Home page': 'Zurück zur Startseite', + 'An error occurred': 'Ein Fehler ist aufgetreten', + "AllProductsFromCategory": "Alle {categoryName}", + "Show more": "Zeig mehr", + "Show less": "Zeige weniger", + "Yes": "Ja", + "No": "Nein", + "Apply filters": "Filter anwenden", + "The coupon code isn't valid. Verify the code and try again.": "Der Gutscheincode ist ungültig. Überprüfen Sie den Code und versuchen Sie es erneut.", + "From": "Aus", + "To": "Zu", + "Your customization": "Ihre Anpassung", + "Passwords don't match":"Passwörter stimmen nicht überein", + "The password must be at least 8 characters long and must contain at least: 1 uppercase or lowercase letter, 1 number, or one special character (E.g. , . _ & ? etc)":"Das Passwort muss mindestens 8 Zeichen lang sein und muss mindestens enthalten: 1 Groß- oder Kleinbuchstabe, 1 Ziffer oder ein Sonderzeichen (z. B. , . _ & ? usw.)", + "Show all products":"Alle Produkte anzeigen", + "Select previously saved address":"Zuvor gespeicherte Adresse auswählen", + "Enter different address":"Geben Sie eine andere Adresse ein", + "You must confirm your account. Please check your email for the confirmation link.": "Sie müssen Ihr Konto bestätigen. Bitte überprüfen Sie Ihre E-Mail auf den Bestätigungslink.", + "Change Store":"Laden Wechseln", + "Choose Currency":"Währung wählen", + "Add a review":"Bewertung hinzufügen", + "Add to cart":"Zum Warenkorb", + "Title":"Titel", + "Name":"Name", + "Review":"Rezension", + "Add review":"Bewertung hinzufügen", + "Are you sure you would like to remove this item from the shopping cart?":"Sind Sie sicher, dass Sie diesen Artikel aus dem Warenkorb entfernen möchten?", + "Your cart is empty":"Ihr Warenkorb ist leer", + "Are you sure?":"Bist du dir sicher?", + "{0} has been successfully removed from your cart":"{0} wurde erfolgreich aus Ihrem Warenkorb entfernt", + "Amount":"Menge", + "Thank you for your order!":"Vielen Dank für Ihren Auftrag!", + "Your Purchase":"Ihr Einkauf", + "Primary contacts for any questions":"Primäre Ansprechpartner für alle Fragen", + "Your Account":"Ihr Konto", + "What can we improve":"Was können wir verbessern", + "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/lang/en.js b/lang/en.js index 27a32b8..066fbb9 100644 --- a/lang/en.js +++ b/lang/en.js @@ -1,169 +1,309 @@ /* eslint-disable */ export default { - 'About us': 'About us', - 'Add new address': 'Add new address', - 'Add to compare': 'Add to compare', - 'Add to Wishlist':'Add to Wishlist', - 'Additional Information': 'Additional Information', - 'Allow order notifications': 'Allow order notifications', - 'Apply': 'Apply', - 'Attention!': 'Attention!', - 'Back to home': 'Back to home', - 'Back to homepage': 'Back to homepage', - 'Billing address': 'Billing address', - 'Brand': 'Brand', - 'Cancel': 'Cancel', - 'Categories': 'Categories', - 'Change password your account': 'If you want to change the password to access your account, enter the following information', - 'Change': 'Change', - 'Clear all': 'Clear all', - 'Color': 'Color', - 'Commercial information': 'and agree to receive personalized commercial information from Brand name by email', - 'Contact details updated': 'Keep your addresses and contact details updated.', - 'Contact us': 'Contact us', - 'Continue to billing': 'Continue to billing', - 'Continue to payment': 'Continue to payment', - 'Continue to shipping': 'Continue to shipping', - 'Cookies Policy': 'Cookies Policy', - 'Create an account': 'Create an account', - 'Customer Reviews': 'Customer Reviews', - 'Customer service': 'Customer service', - 'Delete': 'Delete', - 'Departments': 'Departments', - 'Description': 'Description', - 'Details and status orders': 'Check the details and status of your orders in the online store. You can also cancel your order or request a return.', - 'Discount': 'Discount', - 'Done': 'Done', - 'Download all': 'Download all', - 'Download': 'Download', - 'Edit': 'Edit', - 'Email address': 'Email address', - 'Empty': 'Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.', - 'Enjoy your free account': 'Enjoy these perks with your free account!', - 'Enter promo code': 'Enter promo code', - 'Feedback': 'Your feedback is important to us. Let us know what we could improve.', - 'Feel free to edit': 'Feel free to edit any of your details below so your account is always up to date', - 'Filters': 'Filter', - 'Find out more': 'Find out more', - 'Forgot Password Modal Email': 'Email you are using to sign in:', - 'Forgot Password': 'If you can’t remember your password, you can reset it.', - 'Forgotten password?': 'Forgotten password?', - 'Go back shopping': 'Go back shopping', - 'Go back to shop': 'Go back to shop', - 'Go back': 'Go back', - 'Go to checkout': 'Go to checkout', - 'Guarantee': 'Guarantee', - 'Help & FAQs': 'Help & FAQs', - 'Help': 'Help', - 'hide': 'hide', - 'Home': 'Home', - 'I agree to': 'I agree to', - 'I confirm subscription': 'I confirm subscription', - 'Info after order': 'You can log to your account using e-mail and password defined earlier. On your account you can edit your profile data, check history of transactions, edit subscription to newsletter.', - 'Instruction1': 'Take care of me', - 'Instruction2': 'Just here for the care instructions?', - 'Instruction3': 'Yeah, we thought so', - 'It was not possible to request a new password, please check the entered email address.': 'It was not possible to request a new password, please check the entered email address.', - 'Item': 'Item', - 'Items': 'Items', - 'Kidswear': 'Kidswear', - 'Let’s start now – we’ll help you': 'Let’s start now – we’ll help you.', - 'Log into your account': 'Log into your account', - 'login in to your account': 'login in to your account', - 'Login': 'Login', - 'Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.': 'Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.', - 'Make an order': 'Make an order', - 'Manage addresses': 'Manage all the addresses you want (work place, home address...) This way you won"t have to enter the address manually with each order.', - 'Manage billing addresses': 'Manage all the billing addresses you want (work place, home address...) This way you won"t have to enter the billing address manually with each order.', - 'Manage shipping addresses': 'Manage all the shipping addresses you want (work place, home address...) This way you won"t have to enter the shipping address manually with each order.', - 'Match it with': 'Match it with', - 'Men fashion': 'Men fashion', - 'My Cart': 'My Cart', - 'No account': `Don't have an account yet?`, - 'or fill the details below': 'or fill the details below', - 'or': 'or', - 'Order No.': 'Order No.', - 'Order summary': 'Order summary', - 'Other products you might like': 'Other products you might like', - 'Password Changed': 'Password successfuly changed. You can now go back to homepage and sign in.', - 'Password': 'Password', - 'Pay for order': 'Pay for order', - 'Payment & Delivery': 'Payment & Delivery', - 'Payment method': 'Payment method', - 'Payment methods': 'Payment methods', - 'Payment': 'Payment', - 'Personal details': 'Personal details', - 'Please type your current password to change your email address.': 'Please type your current password to change your email address.', - 'Price': 'Price', - 'Privacy Policy': 'Privacy Policy', - 'Privacy': 'Privacy', - 'Product suggestions': 'Product suggestions', - 'Product': 'Product', - 'Products found': 'Products found', - 'Products': 'Products', - 'Purchase terms': 'Purchase terms', - 'Quality in the details': 'Quality in the details', - 'Quantity': 'Quantity', - 'Read all reviews': 'Read all reviews', - 'Read and understand': 'I have read and understand the', - 'Read reviews': 'Read reviews', - 'Register today': 'Register today', - 'Register': 'Register', - 'Remove from Wishlist':'Remove from Wishlist', - 'Repeat Password': 'Repeat Password', - 'Reset Password': 'Reset Password', - 'Review my order': 'Review my order', - 'Same as shipping address': 'Same as shipping address', - 'Save changes': 'Save changes', - 'Save for later': 'Save for later', - 'Save Password': 'Save Password', - 'Search for items': 'Search for items', - 'Search results': 'Search results', - 'Sections that interest you': 'Sections that interest you', - 'See all results': 'See all results', - 'Select payment method': 'Select payment method', - 'Select shipping method': 'Select shipping method', - 'Send my feedback': 'Send my feedback', - 'Set up newsletter': 'Set up your newsletter and we will send you information about new products and trends from the sections you selected every week.', - 'Share your look': 'Share your look', - 'Shipping address': 'Shipping address', - 'Shipping details': 'Shipping details', - 'Shipping method': 'Shipping method', - 'Shipping': 'Shipping', - 'show more': 'show more', - 'Show on page': 'Show on page', - 'Sign in': 'Sign in', - 'Size guide': 'Size guide', - 'Sort by': 'Sort by', - 'Sort: Default': 'Default', - 'Sort: Name A-Z': 'Name A-Z', - 'Sort: Name Z-A': 'Name Z-A', - 'Sort: Price from high to low': 'Price from high to low', - 'Sort: Price from low to high': 'Price from low to high', - 'Start shopping': 'Start shopping', - 'Subscribe to newsletter': 'Subscribe to newsletter', - 'Subscribe': 'Subscribe', - 'Subtotal': 'Subtotal', - 'Successful placed order': 'You have successfully placed the order. You can check status of your order by using our delivery status feature. You will receive an order confirmation e-mail with details of your order and a link to track its progress.', - 'Terms and conditions': 'Terms and conditions', - 'Thank You Inbox': 'If the message is not arriving in your inbox, try another email address you might’ve used to register.', - 'Total items': 'Total items', - 'Total price': 'Total price', - 'Total': 'Total', - 'Update password': 'Update password', - 'Update personal data': 'Update personal data', - 'Use your personal data': 'At Brand name, we attach great importance to privacy issues and are committed to protecting the personal data of our users. Learn more about how we care and use your personal data in the', - 'User Account': 'User Account', - 'View details': 'View details', - 'View': 'View', - 'Who we are': 'Who we are', - 'Women fashion': 'Women fashion', - 'You can unsubscribe at any time': 'You can unsubscribe at any time', - 'You currently have no orders': 'You currently have no orders', - 'You haven’t searched for items yet': 'You haven’t searched for items yet.', - 'Your bag is empty': 'Your bag is empty', - 'Your current email address is': 'Your current email address is', - forgotPasswordConfirmation: 'Thanks! If there is an account registered with the {0} email, you will find message with a password reset link in your inbox.', - subscribeToNewsletterModalContent: 'After signing up for the newsletter, you will receive special offers and messages from VSF via email. We will not sell or distribute your email to any third party at any time. Please see our {0}.', + "About us": "About us", + "Account": "Account", + "Add new address": "Add new address", + "Add to compare": "Add to compare", + "Add to Wishlist": "Add to Wishlist", + "Additional Information": "Additional Information", + "All Orders": "All Orders", + "Allow order notifications": "Allow order notifications", + "Apply": "Apply", + "Applied Coupon": "Applied Coupon", + "Attention!": "Attention!", + "Back to home": "Back to home", + "Back to homepage": "Back to homepage", + "Billing": "Billing", + "Billing address": "Billing address", + "Brand": "Brand", + "Cancel": "Cancel", + "Cart": "Cart", + "Categories": "Categories", + "Change": "Change", + "Change password your account": "If you want to change the password to access your account, enter the following information", + "Clear all": "Clear all", + "Color": "Color", + "Commercial information": "and agree to receive personalized commercial information from Brand name by email", + "Contact details updated": "Keep your addresses and contact details updated.", + "Contact us": "Contact us", + "Continue to billing": "Continue to billing", + "Continue to payment": "Continue to payment", + "Continue to shipping": "Continue to shipping", + "Cookies Policy": "Cookies Policy", + "Create an account": "Create an account", + "Customer Reviews": "Customer Reviews", + "Customer service": "Customer service", + "Date": "Date", + "Default Billing Address": "Default Billing Address", + "Default Shipping Address": "Default Shipping Address", + "Delete": "Delete", + "Departments": "Departments", + "Description": "Description", + "Details and status orders": "Check the details and status of your orders in the online store. You can also cancel your order or request a return.", + "Discount": "Discount", + "Done": "Done", + "Download": "Download", + "Download all": "Download all", + "Edit": "Edit", + "Email address": "Email address", + "Empty": "Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.", + "Empty bag": "Empty bag", + "Enjoy your free account": "Enjoy these perks with your free account!", + "Enter promo code": "Enter promo code", + "Feedback": "Your feedback is important to us. Let us know what we could improve.", + "Feel free to edit": "Feel free to edit any of your details below so your account is always up to date", + "Filters": "Filters", + "Find out more": "Find out more", + "First Name": "First Name", + "Forgot Password": "If you can’t remember your password, you can reset it.", + "Forgot Password Modal Email": "Email you are using to sign in:", + "forgotPasswordConfirmation": "Thanks! If there is an account registered with the {0} email, you will find message with a password reset link in your inbox.", + "Forgotten password?": "Forgotten password?", + "Go back": "Go back", + "Go back shopping": "Go back shopping", + "Go back to shop": "Go back to shop", + "Go to checkout": "Go to checkout", + "Go to cart": "Go to cart", + "Guarantee": "Guarantee", + "Help": "Help", + "Help & FAQs": "Help & FAQs", + "hide": "hide", + "Home": "Home", + "I agree to": "I agree to", + "I confirm subscription": "I confirm subscription", + "I want to create an account": "I want to create an account", + "Info after order": "You can log to your account using e-mail and password defined earlier. On your account you can edit your profile data, check history of transactions, edit subscription to newsletter.", + "Instruction1": "Take care of me", + "Instruction2": "Just here for the care instructions?", + "Instruction3": "Yeah, we thought so", + "It was not possible to request a new password, please check the entered email address.": "It was not possible to request a new password, please check the entered email address.", + "Item": "Item", + "Items": "Items", + "Kidswear": "Kidswear", + "Last Name": "Last Name", + "Let’s start now – we’ll help you": "Let’s start now – we’ll help you.", + "Log into your account": "Log into your account", + "Login": "Login", + "login in to your account": "login in to your account", + "Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.": "Looks like you haven’t added any items to the bag yet. Start shopping to fill it in.", + "Looks like you haven’t added any items to the Wishlist.": "Looks like you haven’t added any items to the Wishlist.", + "Make an order": "Make an order", + "Manage addresses": "Manage all the addresses you want (work place, home address...) This way you won\"t have to enter the address manually with each order.", + "Manage billing addresses": "Manage all the billing addresses you want (work place, home address...) This way you won\"t have to enter the billing address manually with each order.", + "Manage shipping addresses": "Manage all the shipping addresses you want (work place, home address...) This way you won\"t have to enter the shipping address manually with each order.", + "Match it with": "Match it with", + "Men fashion": "Men fashion", + "Menu": "Menu", + "My billing and shipping address are the same": "My billing and shipping address are the same", + "My Cart": "My Cart", + "No account": "Don't have an account yet?", + "or": "or", + "or fill the details below": "or fill the details below", + "Order ID": "Order ID", + "Order information": "Order information", + "Order No.": "Order No.", + "Order summary": "Order summary", + "Other products you might like": "Other products you might like", + "Out of stock": "Out of stock", + "Password": "Password", + "Password Changed": "Password successfuly changed. You can now go back to homepage and sign in.", + "Pay for order": "Pay for order", + "Payment": "Payment", + "Payment & Delivery": "Payment & Delivery", + "Payment Method": "Payment Method", + "Payment Methods": "Payment Methods", + "Personal details": "Personal details", + "Please type your current password to change your email address.": "Please type your current password to change your email address.", + "Price": "Price", + "Privacy": "Privacy", + "Privacy Policy": "Privacy Policy", + "Product": "Product", + "Product suggestions": "Product suggestions", + "Products": "Products", + "Products found": "Products found", + "Purchase terms": "Purchase terms", + "Quality in the details": "Quality in the details", + "Quantity": "Quantity", + "Read all reviews": "Read all reviews", + "Read and understand": "I have read and understand the", + "Read reviews": "Read reviews", + "Register": "Register", + "Register today": "Register today", + "Remove": "Remove", + "Remove Address": "Remove Address", + "Remove from Wishlist": "Remove from Wishlist", + "Repeat Password": "Repeat Password", + "Reset Password": "Reset Password", + "Review my order": "Review my order", + "Same as shipping address": "Same as shipping address", + "Save changes": "Save changes", + "Save for later": "Save for later", + "Save Password": "Save Password", + "Search": "Search", + "Search for items": "Search for items", + "Search results": "Search results", + "Sections that interest you": "Sections that interest you", + "See all results": "See all results", + "See more": "See more", + "Select payment method": "Select payment method", + "Select shipping method": "Select shipping method", + "Send my feedback": "Send my feedback", + "Set up newsletter": "Set up your newsletter and we will send you information about new products and trends from the sections you selected every week.", + "Share your look": "Share your look", + "Shipping": "Shipping", + "Shipping address": "Shipping address", + "Shipping details": "Shipping details", + "Shipping method": "Shipping method", + "Show":"Show", + "show more": "show more", + "Show on page": "Show on page", + "Sign in": "Sign in", + "Size guide": "Size guide", + "Sign Up for Newsletter": "Sign Up for Newsletter", + "Sort by": "Sort by", + "Sort: Default": "Default", + "Sort: Name A-Z": "Name A-Z", + "Sort: Name Z-A": "Name Z-A", + "Sort: Price from high to low": "Price from high to low", + "Sort: Price from low to high": "Price from low to high", + "Start shopping": "Start shopping", + "Status": "Status", + "Subscribe": "Subscribe", + "Subscribe to newsletter": "Subscribe to newsletter", + "subscribeToNewsletterModalContent": "After signing up for the newsletter, you will receive special offers and messages from VSF via email. We will not sell or distribute your email to any third party at any time. Please see our {0}.", + "Subtotal": "Subtotal", + "Subtotal price": "Subtotal price", + "Successful placed order": "You have successfully placed the order. You can check status of your order by using our delivery status feature. You will receive an order confirmation e-mail with details of your order and a link to track its progress.", + "Terms and conditions": "Terms and conditions", + "Thank you": "Thank you", + "Thank You Inbox": "If the message is not arriving in your inbox, try another email address you might’ve used to register.", + "Total": "Total", + "Order Total": "Order Total", + "Total items": "Total items", + "Total price": "Total price", + "Update password": "Update password", + "Update personal data": "Update personal data", + "Use your personal data": "At Brand name, we attach great importance to privacy issues and are committed to protecting the personal data of our users. Learn more about how we care and use your personal data in the", + "User Account": "User Account", + "View": "View", + "View details": "View details", + "Vue Storefront Next": "Vue Storefront Next", + "Who we are": "Who we are", + "Wishlist": "Wishlist", + "Women fashion": "Women fashion", + "You added {product} to your shopping cart.": "You added {product} to your shopping cart.", + "You are not authorized, please log in": "You are not authorized, please log in", + "You can unsubscribe at any time": "You can unsubscribe at any time", + "You currently have no orders": "You currently have no orders", + "You haven\’t searched for items yet": "You haven’t searched for items yet.", + "Your bag is empty": "Your bag is empty", + "Your current email address is": "Your current email address is", + "Your email": "Your email", + "The email field must be a valid email":"The email field must be a valid email", + 'You have submitted no reviews': 'You have submitted no reviews', + "The account sign-in was incorrect or your account is disabled temporarily. Please wait and try again later.":"The account sign-in was incorrect or your account is disabled temporarily. Please wait and try again later.", + "A customer with the same email address already exists in an associated website.": "A customer with the same email address already exists in an associated website.", + "Invalid email": "Invalid email", + "SUMMER COLLECTION {year}": "SUMMER COLLECTION {year}", + "Colorful summer dresses are already in store": "Colorful summer dresses are already in store", + "Learn more": "Learn more", + "Dresses": "Dresses", + "Cocktail & Party": "Cocktail & Party", + "Linen Dresses": "Linen Dresses", + "T-Shirts": "T-Shirts", + "The office life": "The office life", + "Find stunning women's cocktail dresses and party dresses. Stand out in lace and metallic cocktail dresses from all your favorite brands.": "Find stunning women's cocktail dresses and party dresses. Stand out in lace and metallic cocktail dresses from all your favorite brands.", + "Shop now": "Shop now", + "The Office Life": "The Office Life", + "Summer Sandals": "Summer Sandals", + "Eco Sandals": "Eco Sandals", + "Subscribe to Newsletters": "Subscribe to Newsletters", + "Be aware of upcoming sales and events. Receive gifts and special offers!": "Be aware of upcoming sales and events. Receive gifts and special offers", + "Fashion to take away": "Fashion to take away", + "Download our application to your mobile": "Download our application to your mobile", + "Share Your Look": "Share Your Look", + "My Account": "My Account", + "My profile": "My profile", + "Personal Details": "Personal Details", + "Addresses details": "Addresses details", + "My newsletter": "My newsletter", + "Log out": "Log out", + "My reviews": "My reviews", + "Order history": "Order history", + "Order details": "Order details", + "My wishlist": "My wishlist", + "Password change": "Password change", + "Personal data": "Personal data", + "Your e-mail": "Your e-mail", + "Current Password": "Current Password", + "You are not authorized, please log in.": "You are not authorized, please log in.", + "Go To Product": "Go To Product", + "Change to list view": "Change to list view", + "Change to grid view": "Change to grid view", + "Returns":"Returns", + "My orders": "My orders", + "Add the address": "Add the address", + "Set as default shipping": "Set as default shipping", + "Set as default billing": "Set as default billing", + "House/Apartment number": "House/Apartment number", + "Street Name": "Street Name", + "City": "City", + "State/Province": "State/Province", + "Zip-code": "Zip-code", + "Country": "Country", + "Phone number": "Phone number", + "Please select a country first":"Please select a country first", + "This field is required": "This field is required", + "The field should have at least 2 characters": "The field should have at least 2 characters", + "The field should have at least 4 characters": "The field should have at least 4 characters", + "The field should have at least 8 characters": "The field should have at least 8 characters", + "New Password": "New Password", + "New Products": "New Products", + "There are no shipping methods available for this country. We are sorry, please try with different country.": "There are no shipping methods available for this country. We are sorry, please try with different country.", + "There was some error while trying to fetch shipping methods. We are sorry, please try with different shipping details.": "There was some error while trying to fetch shipping methods. We are sorry, please try with different shipping details.", + "There was some error while trying to select this shipping method. We are sorry, please try with different shipping method.": "There was some error while trying to select this shipping method. We are sorry, please try with different shipping method.", + "We can't find products matching the selection.":"We can't find products matching the selection.", + 'Page not found': 'Page not found', + 'Back to Home page': 'Back to Home page', + 'An error occurred': 'An error occurred', + "AllProductsFromCategory": "All {categoryName}", + "Show more": "Show more", + "Show less": "Show less", + "Yes": "Yes", + "No": "No", + "Apply filters": "Apply filters", + "The coupon code isn't valid. Verify the code and try again.": "The coupon code isn't valid. Verify the code and try again.", + "From": "From", + "To": "To", + "Your customization": "Your customization", + "Passwords don't match":"Passwords don't match", + "The password must be at least 8 characters long and must contain at least: 1 uppercase or lowercase letter, 1 number, or one special character (E.g. , . _ & ? etc)":"The password must be at least 8 characters long and must contain at least: 1 uppercase or lowercase letter, 1 number, or one special character (E.g. , . _ & ? etc)", + "Show all products":"Show all products", + "Select previously saved address":"Select previously saved address", + "Enter different address":"Enter different address", + "You must confirm your account. Please check your email for the confirmation link.": "You must confirm your account. Please check your email for the confirmation link.", + "Change Store":"Change Store", + "Choose Currency":"Choose Currency", + "Add a review":"Add a review", + "Add to cart":"Add to cart", + "Title":"Title", + "Name":"Name", + "Review":"Review", + "Add review":"Add review", + "Are you sure you would like to remove this item from the shopping cart?":"Are you sure you would like to remove this item from the shopping cart?", + "Your cart is empty":"Your cart is empty", + "Are you sure?":"Are you sure?", + "{0} has been successfully removed from your cart":"{0} has been successfully removed from your cart", + "Amount":"Amount", + "Thank you for your order!":"Thank you for your order!", + "Your Purchase":"Your Purchase", + "Primary contacts for any questions":"Primary contacts for any questions", + "Your Account":"Your account", + "What can we improve":"What can we improve", + "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/layouts/account.vue b/layouts/account.vue deleted file mode 100644 index e877243..0000000 --- a/layouts/account.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/layouts/blank.vue b/layouts/blank.vue deleted file mode 100644 index a72d5bc..0000000 --- a/layouts/blank.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/layouts/default.vue b/layouts/default.vue index 43583c0..1f9dbf1 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,55 +1,71 @@ - - diff --git a/middleware.config.js b/middleware.config.js index 9b892e0..d9bad13 100755 --- a/middleware.config.js +++ b/middleware.config.js @@ -1,50 +1,63 @@ -const config = require('./config.js'); +/* eslint-disable unicorn/prefer-module */ +const cookieNames = { + currencyCookieName: 'vsf-currency', + countryCookieName: 'vsf-country', + localeCookieName: 'vsf-locale', + cartCookieName: 'vsf-cart', + customerCookieName: 'vsf-customer', + storeCookieName: 'vsf-store', + messageCookieName: 'vsf-message', +}; + +const isCheckoutEnabled = process.env.VSF_MAGENTO_EXTERNAL_CHECKOUT_ENABLED === 'true'; module.exports = { + helmet: { + crossOriginResourcePolicy: true, + referrerPolicy: { policy: 'origin' }, + frameguard: { action: 'deny' }, + permittedCrossDomainPolicies: { permittedPolicies: 'none' }, + contentSecurityPolicy: { useDefaults: true }, + expectCt: { maxAge: 86_400 }, + }, integrations: { magento: { location: '@vue-storefront/magento-api/server', configuration: { - api: config.get('magentoGraphQl'), + api: process.env.VSF_MAGENTO_GRAPHQL_URL, cookies: { - currencyCookieName: 'vsf-currency', - countryCookieName: 'vsf-country', - localeCookieName: 'vsf-locale', - cartCookieName: 'vsf-cart', - customerCookieName: 'vsf-customer', - storeCookieName: 'vsf-store', + ...cookieNames, + }, + cookiesDefaultOpts: { + 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: { - enable: config.get('enableMagentoExternalCheckout'), - cmsUrl: config.get('externalCheckoutUrl'), - syncUrlPath: config.get('externalCheckoutSyncPath'), + enable: isCheckoutEnabled, + cmsUrl: process.env.VSF_MAGENTO_EXTERNAL_CHECKOUT_URL, + syncUrlPath: process.env.VSF_MAGENTO_EXTERNAL_CHECKOUT_SYNC_PATH, stores: { - default: config.get('enableMagentoExternalCheckout'), + default: isCheckoutEnabled, }, }, - tax: { - displayCartSubtotalIncludingTax: true, + customApolloHttpLinkOptions: { + useGETForQueries: true, }, - websites: { - base: { - code: 'base', - defaultStoreGroup: 'main_website_store', - storeGroups: { - main_website_store: { - code: 'main_website_store', - defaultStore: 'default', - stores: { - default: { code: 'default' }, - de: { code: 'de' }, - fr: { code: 'fr' }, - }, - }, - }, - }, + magentoBaseUrl: process.env.VSF_MAGENTO_BASE_URL, + magentoApiEndpoint: process.env.VSF_MAGENTO_GRAPHQL_URL, + imageProvider: process.env.VSF_IMAGE_PROVIDER, + recaptcha: { + isEnabled: process.env.VSF_RECAPTCHA_ENABLED === 'true', + sitekey: process.env.VSF_RECAPTCHA_SITE_KEY, + secretkey: process.env.VSF_RECAPTCHA_SECRET_KEY, + version: process.env.VSF_RECAPTCHA_VERSION, + score: process.env.VSF_RECAPTCHA_MIN_SCORE, }, - facets: { - available: ['color', 'size', 'price'], + customer: { + customer_create_account_confirm: true, }, }, }, diff --git a/middleware/__tests__/url-resolver.spec.js b/middleware/__tests__/url-resolver.spec.js new file mode 100644 index 0000000..8d80386 --- /dev/null +++ b/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/middleware/checkout.js b/middleware/checkout.ts similarity index 56% rename from middleware/checkout.js rename to middleware/checkout.ts index 4f06109..dfe9c9a 100644 --- a/middleware/checkout.js +++ b/middleware/checkout.ts @@ -1,5 +1,8 @@ -import { Logger } from '@vue-storefront/core'; +import { Middleware } from '@nuxt/types'; +import { Logger } from '~/helpers/logger'; -export default () => { +const middleware : Middleware = () => { Logger.error('Please implement vendor-specific checkout.js middleware in the \'middleware\' directory to block access to checkout steps when customer did not yet complete previous steps'); }; + +export default middleware; diff --git a/middleware/is-authenticated.js b/middleware/is-authenticated.js deleted file mode 100644 index 9405859..0000000 --- a/middleware/is-authenticated.js +++ /dev/null @@ -1,5 +0,0 @@ -export default async ({ app, redirect }) => { - if (!app.$cookies.get('vsf-customer')) { - return redirect('/'); - } -}; diff --git a/middleware/is-authenticated.ts b/middleware/is-authenticated.ts new file mode 100644 index 0000000..8eb0820 --- /dev/null +++ b/middleware/is-authenticated.ts @@ -0,0 +1,9 @@ +import { Middleware } from '@nuxt/types'; + +const middleware : Middleware = (context) => { + if (!context.app.$vsf.$magento.config.state.getCustomerToken()) { + const homepage = context.localeRoute({ name: 'home' }); + context.redirect(homepage); + } +}; +export default middleware; diff --git a/middleware/url-resolver.ts b/middleware/url-resolver.ts new file mode 100644 index 0000000..7d1560c --- /dev/null +++ b/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/mockedSearchProducts.json b/mockedSearchProducts.json deleted file mode 100644 index 0ea8a4b..0000000 --- a/mockedSearchProducts.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "products": [ - { - "_id": "38143c0c-c9b0-448c-93cd-60eb90d8da57", - "_slug": "aspesi-shirt-h805-white", - "_name": "Shirt Aspesi white M", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/081223_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 16625 - } - }, - "_rating": { - "averageRating": 4 - } - }, - { - "_id": "9c1881eb-139d-4d29-bbb4-01b1ff51de03", - "_slug": "moschino-tshirt-b02033717-black", - "_name": "T-Shirt Moschino Cheap And Chic black", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/072750_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 37250 - } - }, - "_rating": { - "averageRating": 2.5 - } - }, - { - "_id": "38143c0c-c9b0-448c-93cd-60eb90d8da57", - "_slug": "aspesi-shirt-h805-white", - "_name": "Shirt Aspesi white M", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/081223_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 16625 - } - }, - "_rating": { - "averageRating": 4 - } - }, - { - "_id": "9c1881eb-139d-4d29-bbb4-01b1ff51de03", - "_slug": "moschino-tshirt-b02033717-black", - "_name": "T-Shirt Moschino Cheap And Chic black", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/072750_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 37250 - } - }, - "_rating": { - "averageRating": 2.5 - } - }, - { - "_id": "38143c0c-c9b0-448c-93cd-60eb90d8da57", - "_slug": "aspesi-shirt-h805-white", - "_name": "Shirt Aspesi white M", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/081223_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 16625 - } - }, - "_rating": { - "averageRating": 4 - } - }, - { - "_id": "9c1881eb-139d-4d29-bbb4-01b1ff51de03", - "_slug": "moschino-tshirt-b02033717-black", - "_name": "T-Shirt Moschino Cheap And Chic black", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/072750_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 37250 - } - }, - "_rating": { - "averageRating": 2.5 - } - }, - { - "_id": "38143c0c-c9b0-448c-93cd-60eb90d8da57", - "_slug": "aspesi-shirt-h805-white", - "_name": "Shirt Aspesi white M", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/081223_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 16625 - } - }, - "_rating": { - "averageRating": 4 - } - }, - { - "_id": "9c1881eb-139d-4d29-bbb4-01b1ff51de03", - "_slug": "moschino-tshirt-b02033717-black", - "_name": "T-Shirt Moschino Cheap And Chic black", - "images": [ - { - "url": "https://s3-eu-west-1.amazonaws.com/commercetools-maximilian/products/072750_1_large.jpg" - } - ], - "price": { - "value": { - "centAmount": 37250 - } - }, - "_rating": { - "averageRating": 2.5 - } - } - ], - "categories": [ - { - "label": "Men", - "slug": "men" - }, - { - "label": "Women", - "slug": "women" - }, - { - "label": "Sale", - "slug": "sale" - }, - { - "label": "New", - "slug": "new" - } - ] -} diff --git a/modules/GraphQL/CategoryTreeRouteTypeguard.ts b/modules/GraphQL/CategoryTreeRouteTypeguard.ts new file mode 100644 index 0000000..62ba0b1 --- /dev/null +++ b/modules/GraphQL/CategoryTreeRouteTypeguard.ts @@ -0,0 +1,3 @@ +import { CategoryTree, RoutableInterface } from '~/modules/GraphQL/types'; + +export const isCategoryTreeRoute = (object: RoutableInterface): object is CategoryTree => (object as CategoryTree).uid !== undefined; diff --git a/modules/GraphQL/types.ts b/modules/GraphQL/types.ts new file mode 100644 index 0000000..33c1c7d --- /dev/null +++ b/modules/GraphQL/types.ts @@ -0,0 +1,51439 @@ +export declare type Maybe = T | null; +export declare type InputMaybe = Maybe; +export declare type Exact = { + [K in keyof T]: T[K]; +}; +export declare type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export declare type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +/** All built-in and custom scalars, mapped to their actual values */ +export interface Scalars { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; +} +export interface AddBundleProductsToCartInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface AddBundleProductsToCartOutput { + cart: Cart; +} +export interface AddConfigurableProductsToCartInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface AddConfigurableProductsToCartOutput { + cart: Cart; +} +export interface AddDownloadableProductsToCartInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface AddDownloadableProductsToCartOutput { + cart: Cart; +} +export interface AddProductsToCartOutput { + /** The cart after products have been added */ + cart: Cart; + /** An error encountered while adding an item to the cart. */ + user_errors: Array>; +} +export interface AddProductsToCompareListInput { + /** An array of product IDs to add to the compare list */ + products: Array>; + /** The unique identifier of the compare list to modify */ + uid: Scalars['ID']; +} +/** Contains the customer's wish list and any errors encountered */ +export interface AddProductsToWishlistOutput { + /** An array of errors encountered while adding products to a wish list */ + user_errors: Array>; + /** Contains the wish list with all items that were successfully added */ + wishlist: Wishlist; +} +export interface AddSimpleProductsToCartInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface AddSimpleProductsToCartOutput { + cart: Cart; +} +export interface AddVirtualProductsToCartInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface AddVirtualProductsToCartOutput { + cart: Cart; +} +export interface AddWishlistItemsToCartOutput { + /** An array of errors encountered while adding products to the customer's cart */ + add_wishlist_items_to_cart_user_errors: Array>; + /** Indicates whether the attempt to add items to the customer's cart was successful */ + status: Scalars['Boolean']; + /** Contains the wish list with all items that were successfully added */ + wishlist: Wishlist; +} +/** A bucket that contains information for each filterable option (such as price, category `UID`, and custom attributes). */ +export interface Aggregation { + /** Attribute code of the aggregation group. */ + attribute_code: Scalars['String']; + /** The number of options in the aggregation group. */ + count?: Maybe; + /** The aggregation display name. */ + label?: Maybe; + /** Array of options for the aggregation. */ + options?: Maybe>>; + /** The relative position of the attribute in a layered navigation block */ + position?: Maybe; +} +export interface AggregationOption extends AggregationOptionInterface { + /** The number of items that match the aggregation option. */ + count?: Maybe; + /** Aggregation option display label. */ + label?: Maybe; + /** The internal ID that represents the value of the option. */ + value: Scalars['String']; +} +export interface AggregationOptionInterface { + /** The number of items that match the aggregation option. */ + count?: Maybe; + /** Aggregation option display label. */ + label?: Maybe; + /** The internal ID that represents the value of the option. */ + value: Scalars['String']; +} +export interface AppliedCoupon { + code: Scalars['String']; +} +export interface ApplyCouponToCartInput { + cart_id: Scalars['String']; + coupon_code: Scalars['String']; +} +export interface ApplyCouponToCartOutput { + cart: Cart; +} +/** AreaInput defines the parameters which will be used for filter by specified location. */ +export interface AreaInput { + /** The radius for the search in KM. */ + radius: Scalars['Int']; + /** The country code where search must be performed. Required parameter together with region, city or postcode. */ + search_term: Scalars['String']; +} +export interface Assets { + /** The payment method logo url (descriptive) */ + descriptive?: Maybe; + /** The payment method logo url (standard) */ + standard?: Maybe; +} +export interface AssignCompareListToCustomerOutput { + /** The contents of the customer's compare list */ + compare_list?: Maybe; + result: Scalars['Boolean']; +} +/** Attribute contains the attribute_type of the specified attribute_code and entity_type */ +export interface Attribute { + /** The unique identifier for an attribute code. This value should be in lowercase letters without spaces. */ + attribute_code?: Maybe; + /** Attribute options list. */ + attribute_options?: Maybe>>; + /** The data type of the attribute */ + attribute_type?: Maybe; + /** The type of entity that defines the attribute */ + entity_type?: Maybe; + /** The frontend input type of the attribute */ + input_type?: Maybe; + /** Contains details about the storefront properties configured for the attribute */ + storefront_properties?: Maybe; +} +/** AttributeInput specifies the attribute_code and entity_type to search */ +export interface AttributeInput { + /** The unique identifier for an attribute code. This value should be in lowercase letters without spaces. */ + attribute_code?: InputMaybe; + /** The type of entity that defines the attribute */ + entity_type?: InputMaybe; +} +/** Attribute option. */ +export interface AttributeOption { + /** Attribute option label. */ + label?: Maybe; + /** Attribute option value. */ + value?: Maybe; +} +export interface AvailablePaymentMethod { + /** The payment method code */ + code: Scalars['String']; + /** The payment method title. */ + title: Scalars['String']; +} +export interface AvailableShippingMethod { + amount: Money; + available: Scalars['Boolean']; + /** @deprecated The field should not be used on the storefront */ + base_amount?: Maybe; + carrier_code: Scalars['String']; + carrier_title: Scalars['String']; + error_message?: Maybe; + /** Could be null if method is not available */ + method_code?: Maybe; + /** Could be null if method is not available */ + method_title?: Maybe; + price_excl_tax: Money; + price_incl_tax: Money; +} +export interface BillingAddressInput { + address?: InputMaybe; + customer_address_id?: InputMaybe; + /** Set billing address same as shipping */ + same_as_shipping?: InputMaybe; + /** Deprecated: use `same_as_shipping` field instead */ + use_for_shipping?: InputMaybe; +} +export interface BillingCartAddress extends CartAddressInterface { + city: Scalars['String']; + company?: Maybe; + country: CartAddressCountry; + /** @deprecated The field is used only in shipping address */ + customer_notes?: Maybe; + firstname: Scalars['String']; + lastname: Scalars['String']; + postcode?: Maybe; + region?: Maybe; + street: Array>; + telephone: Scalars['String']; +} +export interface BraintreeCcVaultInput { + device_data?: InputMaybe; + public_hash: Scalars['String']; +} +export interface BraintreeInput { + /** Contains a fingerprint provided by Braintree JS SDK and should be sent with sale transaction details to the Braintree payment gateway. Should be specified only in a case if Kount (advanced fraud protection) is enabled for Braintree payment integration. */ + device_data?: InputMaybe; + /** States whether an entered by a customer credit/debit card should be tokenized for later usage. Required only if Vault is enabled for Braintree payment integration. */ + is_active_payment_token_enabler: Scalars['Boolean']; + /** The one-time payment token generated by Braintree payment gateway based on card details. Required field to make sale transaction. */ + payment_method_nonce: Scalars['String']; +} +/** Breadcrumb item. */ +export interface Breadcrumb { + /** + * Category ID. + * @deprecated Use the `category_uid` argument instead. + */ + category_id?: Maybe; + /** Category level. */ + category_level?: Maybe; + /** Category name. */ + category_name?: Maybe; + /** The unique ID for a `Breadcrumb` object. */ + category_uid: Scalars['ID']; + /** Category URL key. */ + category_url_key?: Maybe; + /** Category URL path. */ + category_url_path?: Maybe; +} +export interface BundleCartItem extends CartItemInterface { + bundle_options: Array>; + customizable_options: Array>; + /** The entered gift message for the cart item */ + gift_message?: Maybe; + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +export interface BundleCreditMemoItem extends CreditMemoItemInterface { + /** A list of bundle options that are assigned to the bundle product */ + bundle_options?: Maybe>>; + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `CreditMemoItemInterface` object */ + id: Scalars['ID']; + /** The order item the credit memo is applied to */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product, including selected options */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** The number of refunded items */ + quantity_refunded?: Maybe; +} +export interface BundleInvoiceItem extends InvoiceItemInterface { + /** A list of bundle options that are assigned to the bundle product */ + bundle_options?: Maybe>>; + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `InvoiceItemInterface` object */ + id: Scalars['ID']; + /** Contains details about an individual order item */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; +} +/** BundleItem defines an individual item in a bundle product. */ +export interface BundleItem { + /** + * An ID assigned to each type of item in a bundle product. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** An array of additional options for this bundle item. */ + options?: Maybe>>; + /** he relative position of this item compared to the other bundle items. */ + position?: Maybe; + /** Indicates whether the item must be included in the bundle. */ + required?: Maybe; + /** The SKU of the bundle product. */ + sku?: Maybe; + /** The display name of the item. */ + title?: Maybe; + /** The input type that the customer uses to select the item. Examples include radio button and checkbox. */ + type?: Maybe; + /** The unique ID for a `BundleItem` object. */ + uid?: Maybe; +} +/** BundleItemOption defines characteristics and options for a specific bundle item. */ +export interface BundleItemOption { + /** Indicates whether the customer can change the number of items for this option. */ + can_change_quantity?: Maybe; + /** + * The ID assigned to the bundled item option. + * @deprecated Use `uid` instead + */ + id?: Maybe; + /** Indicates whether this option is the default option. */ + is_default?: Maybe; + /** The text that identifies the bundled item option. */ + label?: Maybe; + /** When a bundle item contains multiple options, the relative position of this option compared to the other options. */ + position?: Maybe; + /** The price of the selected option. */ + price?: Maybe; + /** One of FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** Contains details about this product option. */ + product?: Maybe; + /** + * Indicates the quantity of this specific bundle item. + * @deprecated The `qty` is deprecated. Use `quantity` instead. + */ + qty?: Maybe; + /** Indicates the quantity of this specific bundle item. */ + quantity?: Maybe; + /** The unique ID for a `BundleItemOption` object. */ + uid: Scalars['ID']; +} +export interface BundleOptionInput { + id: Scalars['Int']; + quantity: Scalars['Float']; + value: Array>; +} +export interface BundleOrderItem extends OrderItemInterface { + /** A list of bundle options that are assigned to the bundle product */ + bundle_options?: Maybe>>; + /** The final discount information for the product */ + discounts?: Maybe>>; + /** The entered option for the base product, such as a logo or image */ + entered_options?: Maybe>>; + /** The unique ID for a `OrderItemInterface` object */ + id: Scalars['ID']; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price of the base product, including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The type of product, such as simple, configurable, etc. */ + product_type?: Maybe; + /** URL key of the base product */ + product_url_key?: Maybe; + /** The number of canceled items */ + quantity_canceled?: Maybe; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; + /** The number of units ordered for this item */ + quantity_ordered?: Maybe; + /** The number of refunded items */ + quantity_refunded?: Maybe; + /** The number of returned items */ + quantity_returned?: Maybe; + /** The number of shipped items */ + quantity_shipped?: Maybe; + /** The selected options for the base product, such as color or size */ + selected_options?: Maybe>>; + /** The status of the order item */ + status?: Maybe; +} +/** Defines basic features of a bundle product and contains multiple BundleItems */ +export interface BundleProduct extends CustomizableProductInterface, PhysicalProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + /** Indicates whether the bundle product has a dynamic price. */ + dynamic_price?: Maybe; + /** Indicates whether the bundle product has a dynamic SK. */ + dynamic_sku?: Maybe; + /** Indicates whether the bundle product has a dynamically calculated weight. */ + dynamic_weight?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** An array containing information about individual bundle items. */ + items?: Maybe>>; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** An array of options for a customizable product. */ + options?: Maybe>>; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** One of PRICE_RANGE or AS_LOW_AS. */ + price_view?: Maybe; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** Indicates whether to ship bundle items together or individually. */ + ship_bundle_items?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; + /** The weight of the item, in units defined by the store. */ + weight?: Maybe; +} +/** Defines basic features of a bundle product and contains multiple BundleItems */ +export interface BundleProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +export interface BundleProductCartItemInput { + bundle_options: Array>; + customizable_options?: InputMaybe>>; + data: CartItemInput; +} +export interface BundleShipmentItem extends ShipmentItemInterface { + /** A list of bundle options that are assigned to the bundle product */ + bundle_options?: Maybe>>; + /** The unique ID for a `ShipmentItemInterface` object */ + id: Scalars['ID']; + /** Associated order item */ + order_item?: Maybe; + /** Name of the base product */ + product_name?: Maybe; + /** Sale price for the base product */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** Number of shipped items */ + quantity_shipped: Scalars['Float']; +} +export interface BundleWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** An array containing information about the selected bundle items */ + bundle_options?: Maybe>>; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +export interface Cart { + /** + * An array of coupons that have been applied to the cart + * @deprecated Use applied_coupons instead + */ + applied_coupon?: Maybe; + /** An array of `AppliedCoupon` objects. Each object contains the `code` text attribute, which specifies the coupon code */ + applied_coupons?: Maybe>>; + /** Available payment methods */ + available_payment_methods?: Maybe>>; + billing_address?: Maybe; + email?: Maybe; + /** The entered gift message for the cart */ + gift_message?: Maybe; + /** The unique ID for a `Cart` object */ + id: Scalars['ID']; + is_virtual: Scalars['Boolean']; + items?: Maybe>>; + prices?: Maybe; + selected_payment_method?: Maybe; + shipping_addresses: Array>; + total_quantity: Scalars['Float']; +} +export interface CartAddressCountry { + code: Scalars['String']; + label: Scalars['String']; +} +export interface CartAddressInput { + city: Scalars['String']; + company?: InputMaybe; + country_code: Scalars['String']; + firstname: Scalars['String']; + lastname: Scalars['String']; + postcode?: InputMaybe; + region?: InputMaybe; + region_id?: InputMaybe; + /** Determines whether to save the address in the customer's address book. The default value is true */ + save_in_address_book?: InputMaybe; + street: Array>; + telephone: Scalars['String']; +} +export interface CartAddressInterface { + city: Scalars['String']; + company?: Maybe; + country: CartAddressCountry; + firstname: Scalars['String']; + lastname: Scalars['String']; + postcode?: Maybe; + region?: Maybe; + street: Array>; + telephone: Scalars['String']; +} +export interface CartAddressRegion { + code?: Maybe; + label?: Maybe; + region_id?: Maybe; +} +export interface CartDiscount { + amount: Money; + label: Array>; +} +export interface CartItemInput { + /** An array of entered options for the base product, such as personalization text */ + entered_options?: InputMaybe>>; + /** For child products, the SKU of its parent product */ + parent_sku?: InputMaybe; + quantity: Scalars['Float']; + /** The selected options for the base product, such as color or size with unique ID for a `CustomizableRadioOption`, `CustomizableDropDownOption`, `ConfigurableProductOptionsValues`, etc. objects */ + selected_options?: InputMaybe>>; + sku: Scalars['String']; +} +export interface CartItemInterface { + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +export interface CartItemPrices { + /** An array of discounts to be applied to the cart item */ + discounts?: Maybe>>; + /** Applied FPT to the cart item. */ + fixed_product_taxes?: Maybe>>; + price: Money; + row_total: Money; + row_total_including_tax: Money; + /** The total of all discounts applied to the item */ + total_item_discount?: Maybe; +} +/** Deprecated: `cart_items` field of `ShippingCartAddress` returns now `CartItemInterface` instead of `CartItemQuantity` */ +export interface CartItemQuantity { + /** @deprecated `cart_items` field of `ShippingCartAddress` returns now `CartItemInterface` instead of `CartItemQuantity` */ + cart_item_id: Scalars['Int']; + /** @deprecated `cart_items` field of `ShippingCartAddress` returns now `CartItemInterface` instead of `CartItemQuantity` */ + quantity: Scalars['Float']; +} +export interface CartItemSelectedOptionValuePrice { + type: PriceTypeEnum; + units: Scalars['String']; + value: Scalars['Float']; +} +export interface CartItemUpdateInput { + /** Deprecated. Use `cart_item_uid` instead. */ + cart_item_id?: InputMaybe; + /** The unique ID for a `CartItemInterface` object */ + cart_item_uid?: InputMaybe; + customizable_options?: InputMaybe>>; + /** Gift message details for the cart item */ + gift_message?: InputMaybe; + quantity?: InputMaybe; +} +export interface CartPrices { + applied_taxes?: Maybe>>; + /** @deprecated Use discounts instead */ + discount?: Maybe; + /** An array of applied discounts */ + discounts?: Maybe>>; + grand_total?: Maybe; + subtotal_excluding_tax?: Maybe; + subtotal_including_tax?: Maybe; + subtotal_with_discount_excluding_tax?: Maybe; +} +export interface CartTaxItem { + amount: Money; + label: Scalars['String']; +} +/** An error encountered while adding an item to the the cart. */ +export interface CartUserInputError { + /** Cart-specific error code */ + code: CartUserInputErrorType; + /** A localized error message */ + message: Scalars['String']; +} +export declare enum CartUserInputErrorType { + InsufficientStock = 'INSUFFICIENT_STOCK', + NotSalable = 'NOT_SALABLE', + ProductNotFound = 'PRODUCT_NOT_FOUND', + Undefined = 'UNDEFINED', +} +export interface Categories { + /** The payment method assets */ + asset_urls?: Maybe>>; + /** The payment method identifier */ + identifier: Scalars['String']; + /** The payment method name */ + name: Scalars['String']; +} +/** CategoryFilterInput defines the filters to be used in the search. A filter contains at least one attribute, a comparison operator, and the value that is being searched for. */ +export interface CategoryFilterInput { + /** Filter by the unique category ID for a `CategoryInterface` object. */ + category_uid?: InputMaybe; + /** Deprecated: use 'category_uid' to filter uniquely identifiers of categories. */ + ids?: InputMaybe; + /** Filter by the display name of the category. */ + name?: InputMaybe; + /** Filter by the unique parent category ID for a `CategoryInterface` object. */ + parent_category_uid?: InputMaybe; + /** Filter by the unique parent category ID for a `CategoryInterface` object. */ + parent_id?: InputMaybe; + /** Filter by the part of the URL that identifies the category. */ + url_key?: InputMaybe; + /** Filter by the URL path for the category. */ + url_path?: InputMaybe; +} +/** CategoryInterface contains the full set of attributes that can be returned in a category search. */ +export interface CategoryInterface { + available_sort_by?: Maybe>>; + /** Breadcrumbs, parent categories info. */ + breadcrumbs?: Maybe>>; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Categories' is enabled */ + canonical_url?: Maybe; + children_count?: Maybe; + /** Category CMS Block. */ + cms_block?: Maybe; + /** + * Timestamp indicating when the category was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + custom_layout_update_file?: Maybe; + /** The attribute to use for sorting. */ + default_sort_by?: Maybe; + /** An optional description of the category. */ + description?: Maybe; + display_mode?: Maybe; + filter_price_range?: Maybe; + /** + * An ID that uniquely identifies the category. + * @deprecated Use the `uid` argument instead. + */ + id?: Maybe; + image?: Maybe; + include_in_menu?: Maybe; + is_anchor?: Maybe; + landing_page?: Maybe; + /** Indicates the depth of the category within the tree. */ + level?: Maybe; + meta_description?: Maybe; + meta_keywords?: Maybe; + meta_title?: Maybe; + /** The display name of the category. */ + name?: Maybe; + /** Category Path. */ + path?: Maybe; + /** Category path in store. */ + path_in_store?: Maybe; + /** The position of the category relative to other categories at the same level in tree. */ + position?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + product_count?: Maybe; + /** The list of products assigned to the category. */ + products?: Maybe; + /** The unique ID for a `CategoryInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the category was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** The url key assigned to the category. */ + url_key?: Maybe; + /** The url path assigned to the category. */ + url_path?: Maybe; + /** The part of the category URL that is appended after the url key */ + url_suffix?: Maybe; +} +/** CategoryInterface contains the full set of attributes that can be returned in a category search. */ +export interface CategoryInterfaceProductsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; + sort?: InputMaybe; +} +/** The category products object returned in the Category query. */ +export interface CategoryProducts { + /** An array of products that are assigned to the category. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + total_count?: Maybe; +} +/** A collection of CategoryTree objects and pagination information. */ +export interface CategoryResult { + /** A list of categories that match the filter criteria. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** The total number of categories that match the criteria. */ + total_count?: Maybe; +} +/** Category tree implementation */ +export interface CategoryTree extends CategoryInterface, RoutableInterface { + available_sort_by?: Maybe>>; + /** Breadcrumbs, parent categories info. */ + breadcrumbs?: Maybe>>; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Categories' is enabled */ + canonical_url?: Maybe; + /** Child categories tree. */ + children?: Maybe>>; + children_count?: Maybe; + /** Category CMS Block. */ + cms_block?: Maybe; + /** + * Timestamp indicating when the category was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + custom_layout_update_file?: Maybe; + /** The attribute to use for sorting. */ + default_sort_by?: Maybe; + /** An optional description of the category. */ + description?: Maybe; + display_mode?: Maybe; + filter_price_range?: Maybe; + /** + * An ID that uniquely identifies the category. + * @deprecated Use the `uid` argument instead. + */ + id?: Maybe; + image?: Maybe; + include_in_menu?: Maybe; + is_anchor?: Maybe; + landing_page?: Maybe; + /** Indicates the depth of the category within the tree. */ + level?: Maybe; + meta_description?: Maybe; + meta_keywords?: Maybe; + meta_title?: Maybe; + /** The display name of the category. */ + name?: Maybe; + /** Category Path. */ + path?: Maybe; + /** Category path in store. */ + path_in_store?: Maybe; + /** The position of the category relative to other categories at the same level in tree. */ + position?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + product_count?: Maybe; + /** The list of products assigned to the category. */ + products?: Maybe; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** The unique ID for a `CategoryInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the category was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** The url key assigned to the category. */ + url_key?: Maybe; + /** The url path assigned to the category. */ + url_path?: Maybe; + /** The part of the category URL that is appended after the url key */ + url_suffix?: Maybe; +} +/** Category tree implementation */ +export interface CategoryTreeProductsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; + sort?: InputMaybe; +} +export interface ChatData { + /** API space id */ + api_space_id?: Maybe; + /** Cookie name */ + cookie_name?: Maybe; + /** Is chat enabled */ + is_enabled?: Maybe; +} +/** Defines all Checkout Agreement information */ +export interface CheckoutAgreement { + /** Checkout Agreement identifier */ + agreement_id: Scalars['Int']; + /** Checkout Agreement checkbox text */ + checkbox_text: Scalars['String']; + /** Checkout Agreement content */ + content: Scalars['String']; + /** Checkout Agreement content height */ + content_height?: Maybe; + /** Is Checkout Agreement content in HTML format */ + is_html: Scalars['Boolean']; + mode: CheckoutAgreementMode; + /** Checkout Agreement name */ + name: Scalars['String']; +} +export declare enum CheckoutAgreementMode { + Auto = 'AUTO', + Manual = 'MANUAL', +} +/** An error encountered while adding an item the the cart. */ +export interface CheckoutUserInputError { + /** Checkout-specific error code */ + code: CheckoutUserInputErrorCodes; + /** Localized error message */ + message: Scalars['String']; + /** Path to the input field that caused an error. See the GraphQL specification about path errors for details: http://spec.graphql.org/draft/#sec-Errors */ + path: Array>; +} +export declare enum CheckoutUserInputErrorCodes { + InsufficientStock = 'INSUFFICIENT_STOCK', + NotSalable = 'NOT_SALABLE', + ProductNotFound = 'PRODUCT_NOT_FOUND', + ReorderNotAvailable = 'REORDER_NOT_AVAILABLE', + Undefined = 'UNDEFINED', +} +/** CMS block defines all CMS block information */ +export interface CmsBlock { + /** CMS block content */ + content?: Maybe; + /** CMS block identifier */ + identifier?: Maybe; + /** CMS block title */ + title?: Maybe; +} +/** CMS blocks information */ +export interface CmsBlocks { + /** An array of CMS blocks */ + items?: Maybe>>; +} +/** CMS page defines all CMS page information */ +export interface CmsPage extends RoutableInterface { + /** CMS page content */ + content?: Maybe; + /** CMS page content heading */ + content_heading?: Maybe; + /** Identifier of the CMS page */ + identifier?: Maybe; + /** CMS page meta description */ + meta_description?: Maybe; + /** CMS page meta keywords */ + meta_keywords?: Maybe; + /** CMS page meta title */ + meta_title?: Maybe; + /** CMS page content heading */ + page_layout?: Maybe; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** CMS page title */ + title?: Maybe; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** URL key of CMS page */ + url_key?: Maybe; +} +export interface ColorSwatchData extends SwatchDataInterface { + /** Value of swatch item (HEX color code, image link or textual value) */ + value?: Maybe; +} +export interface ComparableAttribute { + /** An attribute code that is enabled for product comparisons */ + code: Scalars['String']; + /** The label of the attribute code */ + label: Scalars['String']; +} +export interface ComparableItem { + /** An array of product attributes that can be used to compare products */ + attributes: Array>; + /** Contains details about a product in a compare list */ + product: ProductInterface; + /** The unique ID of an item in a compare list */ + uid: Scalars['ID']; +} +export interface CompareList { + /** An array of attributes that can be used for comparing products */ + attributes?: Maybe>>; + /** The number of items in the compare list */ + item_count: Scalars['Int']; + /** An array of products to compare */ + items?: Maybe>>; + /** The unique ID assigned to the compare list */ + uid: Scalars['ID']; +} +export interface ComplexTextValue { + /** HTML format */ + html: Scalars['String']; +} +/** ConfigurableAttributeOption contains the value_index (and other related information) assigned to a configurable product option */ +export interface ConfigurableAttributeOption { + /** The ID assigned to the attribute */ + code?: Maybe; + /** A string that describes the configurable attribute option */ + label?: Maybe; + /** The unique ID for a `ConfigurableAttributeOption` object */ + uid: Scalars['ID']; + /** A unique index number assigned to the configurable product option */ + value_index?: Maybe; +} +export interface ConfigurableCartItem extends CartItemInterface { + configurable_options: Array>; + /** Product details of the cart item */ + configured_variant: ProductInterface; + customizable_options?: Maybe>>; + /** The entered gift message for the cart item */ + gift_message?: Maybe; + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +/** Configurable option available for further selection based on current selection. */ +export interface ConfigurableOptionAvailableForSelection { + /** Attribute code that uniquely identifies configurable option. */ + attribute_code: Scalars['String']; + /** Configurable option values available for further selection. */ + option_value_uids: Array>; +} +/** ConfigurableProduct defines basic features of a configurable product and its simple product variants */ +export interface ConfigurableProduct extends CustomizableProductInterface, PhysicalProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** An array of linked simple product items */ + configurable_options?: Maybe>>; + /** Specified configurable product options selection */ + configurable_product_options_selection?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** An array of options for a customizable product. */ + options?: Maybe>>; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** An array of variants of products */ + variants?: Maybe>>; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; + /** The weight of the item, in units defined by the store. */ + weight?: Maybe; +} + +/** ConfigurableProduct defines basic features of a configurable product and its simple product variants */ +export interface ConfigurableProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} + +export interface ConfigurableProductCartItemInput { + customizable_options?: InputMaybe>>; + data: CartItemInput; + /** Configurable product SKU. */ + parent_sku?: InputMaybe; + /** Deprecated. Use CartItemInput.sku instead. */ + variant_sku?: InputMaybe; +} +export interface ConfigurableProductOption { + attribute_code: Scalars['String']; + label: Scalars['String']; + uid: Scalars['ID']; + values?: Maybe>>; +} +export interface ConfigurableProductOptionValue { + is_available: Scalars['Boolean']; + is_use_default: Scalars['Boolean']; + label: Scalars['String']; + swatch?: Maybe; + uid: Scalars['ID']; +} +/** ConfigurableProductOptions defines configurable attributes for the specified product */ +export interface ConfigurableProductOptions { + /** A string that identifies the attribute */ + attribute_code?: Maybe; + /** + * The ID assigned to the attribute + * @deprecated Use attribute_uid instead + */ + attribute_id?: Maybe; + /** + * The ID assigned to the attribute + * @deprecated Use attribute_uid instead + */ + attribute_id_v2?: Maybe; + /** The unique ID for a `Attribute` object */ + attribute_uid: Scalars['ID']; + /** + * The configurable option ID number assigned by the system + * @deprecated Use uid instead + */ + id?: Maybe; + /** A string that describes the configurable product option, which is displayed on the UI */ + label?: Maybe; + /** A number that indicates the order in which the attribute is displayed */ + position?: Maybe; + /** + * This is the same as a product's id field + * @deprecated `product_id` is not needed and can be obtained from it's parent + */ + product_id?: Maybe; + /** The unique ID for a `ConfigurableProductOptions` object */ + uid: Scalars['ID']; + /** Indicates whether the option is the default */ + use_default?: Maybe; + /** An array that defines the value_index codes assigned to the configurable product */ + values?: Maybe>>; +} +/** Metadata corresponding to the configurable options selection. */ +export interface ConfigurableProductOptionsSelection { + /** Configurable options available for further selection based on current selection. */ + configurable_options?: Maybe>>; + /** Product images and videos corresponding to the specified configurable options selection. */ + media_gallery?: Maybe>>; + /** Configurable options available for further selection based on current selection. */ + options_available_for_selection?: Maybe>>; + /** Variant represented by the specified configurable options selection. It is expected to be null, until selections are made for each configurable option. */ + variant?: Maybe; +} +/** ConfigurableProductOptionsValues contains the index number assigned to a configurable product option */ +export interface ConfigurableProductOptionsValues { + /** The label of the product on the default store */ + default_label?: Maybe; + /** The label of the product */ + label?: Maybe; + /** The label of the product on the current store */ + store_label?: Maybe; + /** Swatch data for configurable product option */ + swatch_data?: Maybe; + /** The unique ID for a `ConfigurableProductOptionsValues` object */ + uid?: Maybe; + /** Indicates whether to use the default_label */ + use_default_value?: Maybe; + /** + * A unique index number assigned to the configurable product option + * @deprecated Use `uid` instead + */ + value_index?: Maybe; +} +/** An array containing all the simple product variants of a configurable product */ +export interface ConfigurableVariant { + attributes?: Maybe>>; + product?: Maybe; +} +/** A configurable product wish list item */ +export interface ConfigurableWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** The SKU of the simple product corresponding to a set of selected configurable options */ + child_sku: Scalars['String']; + /** An array of selected configurable options */ + configurable_options?: Maybe>>; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +export interface Country { + available_regions?: Maybe>>; + full_name_english?: Maybe; + full_name_locale?: Maybe; + /** The unique ID for a `Country` object. */ + id?: Maybe; + three_letter_abbreviation?: Maybe; + two_letter_abbreviation?: Maybe; +} +/** The list of countries codes */ +export declare enum CountryCodeEnum { + /** Andorra */ + Ad = 'AD', + /** United Arab Emirates */ + Ae = 'AE', + /** Afghanistan */ + Af = 'AF', + /** Antigua & Barbuda */ + Ag = 'AG', + /** Anguilla */ + Ai = 'AI', + /** Albania */ + Al = 'AL', + /** Armenia */ + Am = 'AM', + /** Netherlands Antilles */ + An = 'AN', + /** Angola */ + Ao = 'AO', + /** Antarctica */ + Aq = 'AQ', + /** Argentina */ + Ar = 'AR', + /** American Samoa */ + As = 'AS', + /** Austria */ + At = 'AT', + /** Australia */ + Au = 'AU', + /** Aruba */ + Aw = 'AW', + /** Åland Islands */ + Ax = 'AX', + /** Azerbaijan */ + Az = 'AZ', + /** Bosnia & Herzegovina */ + Ba = 'BA', + /** Barbados */ + Bb = 'BB', + /** Bangladesh */ + Bd = 'BD', + /** Belgium */ + Be = 'BE', + /** Burkina Faso */ + Bf = 'BF', + /** Bulgaria */ + Bg = 'BG', + /** Bahrain */ + Bh = 'BH', + /** Burundi */ + Bi = 'BI', + /** Benin */ + Bj = 'BJ', + /** St. Barthélemy */ + Bl = 'BL', + /** Bermuda */ + Bm = 'BM', + /** Brunei */ + Bn = 'BN', + /** Bolivia */ + Bo = 'BO', + /** Brazil */ + Br = 'BR', + /** Bahamas */ + Bs = 'BS', + /** Bhutan */ + Bt = 'BT', + /** Bouvet Island */ + Bv = 'BV', + /** Botswana */ + Bw = 'BW', + /** Belarus */ + By = 'BY', + /** Belize */ + Bz = 'BZ', + /** Canada */ + Ca = 'CA', + /** Cocos (Keeling) Islands */ + Cc = 'CC', + /** Congo-Kinshasa */ + Cd = 'CD', + /** Central African Republic */ + Cf = 'CF', + /** Congo-Brazzaville */ + Cg = 'CG', + /** Switzerland */ + Ch = 'CH', + /** Côte d’Ivoire */ + Ci = 'CI', + /** Cook Islands */ + Ck = 'CK', + /** Chile */ + Cl = 'CL', + /** Cameroon */ + Cm = 'CM', + /** China */ + Cn = 'CN', + /** Colombia */ + Co = 'CO', + /** Costa Rica */ + Cr = 'CR', + /** Cuba */ + Cu = 'CU', + /** Cape Verde */ + Cv = 'CV', + /** Christmas Island */ + Cx = 'CX', + /** Cyprus */ + Cy = 'CY', + /** Czech Republic */ + Cz = 'CZ', + /** Germany */ + De = 'DE', + /** Djibouti */ + Dj = 'DJ', + /** Denmark */ + Dk = 'DK', + /** Dominica */ + Dm = 'DM', + /** Dominican Republic */ + Do = 'DO', + /** Algeria */ + Dz = 'DZ', + /** Ecuador */ + Ec = 'EC', + /** Estonia */ + Ee = 'EE', + /** Egypt */ + Eg = 'EG', + /** Western Sahara */ + Eh = 'EH', + /** Eritrea */ + Er = 'ER', + /** Spain */ + Es = 'ES', + /** Ethiopia */ + Et = 'ET', + /** Finland */ + Fi = 'FI', + /** Fiji */ + Fj = 'FJ', + /** Falkland Islands */ + Fk = 'FK', + /** Micronesia */ + Fm = 'FM', + /** Faroe Islands */ + Fo = 'FO', + /** France */ + Fr = 'FR', + /** Gabon */ + Ga = 'GA', + /** United Kingdom */ + Gb = 'GB', + /** Grenada */ + Gd = 'GD', + /** Georgia */ + Ge = 'GE', + /** French Guiana */ + Gf = 'GF', + /** Guernsey */ + Gg = 'GG', + /** Ghana */ + Gh = 'GH', + /** Gibraltar */ + Gi = 'GI', + /** Greenland */ + Gl = 'GL', + /** Gambia */ + Gm = 'GM', + /** Guinea */ + Gn = 'GN', + /** Guadeloupe */ + Gp = 'GP', + /** Equatorial Guinea */ + Gq = 'GQ', + /** Greece */ + Gr = 'GR', + /** South Georgia & South Sandwich Islands */ + Gs = 'GS', + /** Guatemala */ + Gt = 'GT', + /** Guam */ + Gu = 'GU', + /** Guinea-Bissau */ + Gw = 'GW', + /** Guyana */ + Gy = 'GY', + /** Hong Kong SAR China */ + Hk = 'HK', + /** Heard & McDonald Islands */ + Hm = 'HM', + /** Honduras */ + Hn = 'HN', + /** Croatia */ + Hr = 'HR', + /** Haiti */ + Ht = 'HT', + /** Hungary */ + Hu = 'HU', + /** Indonesia */ + Id = 'ID', + /** Ireland */ + Ie = 'IE', + /** Israel */ + Il = 'IL', + /** Isle of Man */ + Im = 'IM', + /** India */ + In = 'IN', + /** British Indian Ocean Territory */ + Io = 'IO', + /** Iraq */ + Iq = 'IQ', + /** Iran */ + Ir = 'IR', + /** Iceland */ + Is = 'IS', + /** Italy */ + It = 'IT', + /** Jersey */ + Je = 'JE', + /** Jamaica */ + Jm = 'JM', + /** Jordan */ + Jo = 'JO', + /** Japan */ + Jp = 'JP', + /** Kenya */ + Ke = 'KE', + /** Kyrgyzstan */ + Kg = 'KG', + /** Cambodia */ + Kh = 'KH', + /** Kiribati */ + Ki = 'KI', + /** Comoros */ + Km = 'KM', + /** St. Kitts & Nevis */ + Kn = 'KN', + /** North Korea */ + Kp = 'KP', + /** South Korea */ + Kr = 'KR', + /** Kuwait */ + Kw = 'KW', + /** Cayman Islands */ + Ky = 'KY', + /** Kazakhstan */ + Kz = 'KZ', + /** Laos */ + La = 'LA', + /** Lebanon */ + Lb = 'LB', + /** St. Lucia */ + Lc = 'LC', + /** Liechtenstein */ + Li = 'LI', + /** Sri Lanka */ + Lk = 'LK', + /** Liberia */ + Lr = 'LR', + /** Lesotho */ + Ls = 'LS', + /** Lithuania */ + Lt = 'LT', + /** Luxembourg */ + Lu = 'LU', + /** Latvia */ + Lv = 'LV', + /** Libya */ + Ly = 'LY', + /** Morocco */ + Ma = 'MA', + /** Monaco */ + Mc = 'MC', + /** Moldova */ + Md = 'MD', + /** Montenegro */ + Me = 'ME', + /** St. Martin */ + Mf = 'MF', + /** Madagascar */ + Mg = 'MG', + /** Marshall Islands */ + Mh = 'MH', + /** Macedonia */ + Mk = 'MK', + /** Mali */ + Ml = 'ML', + /** Myanmar (Burma) */ + Mm = 'MM', + /** Mongolia */ + Mn = 'MN', + /** Macau SAR China */ + Mo = 'MO', + /** Northern Mariana Islands */ + Mp = 'MP', + /** Martinique */ + Mq = 'MQ', + /** Mauritania */ + Mr = 'MR', + /** Montserrat */ + Ms = 'MS', + /** Malta */ + Mt = 'MT', + /** Mauritius */ + Mu = 'MU', + /** Maldives */ + Mv = 'MV', + /** Malawi */ + Mw = 'MW', + /** Mexico */ + Mx = 'MX', + /** Malaysia */ + My = 'MY', + /** Mozambique */ + Mz = 'MZ', + /** Namibia */ + Na = 'NA', + /** New Caledonia */ + Nc = 'NC', + /** Niger */ + Ne = 'NE', + /** Norfolk Island */ + Nf = 'NF', + /** Nigeria */ + Ng = 'NG', + /** Nicaragua */ + Ni = 'NI', + /** Netherlands */ + Nl = 'NL', + /** Norway */ + No = 'NO', + /** Nepal */ + Np = 'NP', + /** Nauru */ + Nr = 'NR', + /** Niue */ + Nu = 'NU', + /** New Zealand */ + Nz = 'NZ', + /** Oman */ + Om = 'OM', + /** Panama */ + Pa = 'PA', + /** Peru */ + Pe = 'PE', + /** French Polynesia */ + Pf = 'PF', + /** Papua New Guinea */ + Pg = 'PG', + /** Philippines */ + Ph = 'PH', + /** Pakistan */ + Pk = 'PK', + /** Poland */ + Pl = 'PL', + /** St. Pierre & Miquelon */ + Pm = 'PM', + /** Pitcairn Islands */ + Pn = 'PN', + /** Palestinian Territories */ + Ps = 'PS', + /** Portugal */ + Pt = 'PT', + /** Palau */ + Pw = 'PW', + /** Paraguay */ + Py = 'PY', + /** Qatar */ + Qa = 'QA', + /** Réunion */ + Re = 'RE', + /** Romania */ + Ro = 'RO', + /** Serbia */ + Rs = 'RS', + /** Russia */ + Ru = 'RU', + /** Rwanda */ + Rw = 'RW', + /** Saudi Arabia */ + Sa = 'SA', + /** Solomon Islands */ + Sb = 'SB', + /** Seychelles */ + Sc = 'SC', + /** Sudan */ + Sd = 'SD', + /** Sweden */ + Se = 'SE', + /** Singapore */ + Sg = 'SG', + /** St. Helena */ + Sh = 'SH', + /** Slovenia */ + Si = 'SI', + /** Svalbard & Jan Mayen */ + Sj = 'SJ', + /** Slovakia */ + Sk = 'SK', + /** Sierra Leone */ + Sl = 'SL', + /** San Marino */ + Sm = 'SM', + /** Senegal */ + Sn = 'SN', + /** Somalia */ + So = 'SO', + /** Suriname */ + Sr = 'SR', + /** São Tomé & Príncipe */ + St = 'ST', + /** El Salvador */ + Sv = 'SV', + /** Syria */ + Sy = 'SY', + /** Swaziland */ + Sz = 'SZ', + /** Turks & Caicos Islands */ + Tc = 'TC', + /** Chad */ + Td = 'TD', + /** French Southern Territories */ + Tf = 'TF', + /** Togo */ + Tg = 'TG', + /** Thailand */ + Th = 'TH', + /** Tajikistan */ + Tj = 'TJ', + /** Tokelau */ + Tk = 'TK', + /** Timor-Leste */ + Tl = 'TL', + /** Turkmenistan */ + Tm = 'TM', + /** Tunisia */ + Tn = 'TN', + /** Tonga */ + To = 'TO', + /** Turkey */ + Tr = 'TR', + /** Trinidad & Tobago */ + Tt = 'TT', + /** Tuvalu */ + Tv = 'TV', + /** Taiwan */ + Tw = 'TW', + /** Tanzania */ + Tz = 'TZ', + /** Ukraine */ + Ua = 'UA', + /** Uganda */ + Ug = 'UG', + /** U.S. Outlying Islands */ + Um = 'UM', + /** United States */ + Us = 'US', + /** Uruguay */ + Uy = 'UY', + /** Uzbekistan */ + Uz = 'UZ', + /** Vatican City */ + Va = 'VA', + /** St. Vincent & Grenadines */ + Vc = 'VC', + /** Venezuela */ + Ve = 'VE', + /** British Virgin Islands */ + Vg = 'VG', + /** U.S. Virgin Islands */ + Vi = 'VI', + /** Vietnam */ + Vn = 'VN', + /** Vanuatu */ + Vu = 'VU', + /** Wallis & Futuna */ + Wf = 'WF', + /** Samoa */ + Ws = 'WS', + /** Yemen */ + Ye = 'YE', + /** Mayotte */ + Yt = 'YT', + /** South Africa */ + Za = 'ZA', + /** Zambia */ + Zm = 'ZM', + /** Zimbabwe */ + Zw = 'ZW', +} +export interface CreateCompareListInput { + /** An array of product IDs to add to the compare list */ + products?: InputMaybe>>; +} +/** Contains the secure information used to authorize transaction. Applies to Payflow Pro and Payments Pro payment methods. */ +export interface CreatePayflowProTokenOutput { + response_message: Scalars['String']; + result: Scalars['Int']; + result_code: Scalars['Int']; + secure_token: Scalars['String']; + secure_token_id: Scalars['String']; +} +export interface CreateProductReviewInput { + /** The customer's nickname. Defaults to the customer name, if logged in */ + nickname: Scalars['String']; + /** Ratings details by category. e.g price: 5, quality: 4 etc */ + ratings: Array>; + /** The SKU of the reviewed product */ + sku: Scalars['String']; + /** The summary (title) of the review */ + summary: Scalars['String']; + /** The review text. */ + text: Scalars['String']; + /** The reCaptcha Token. */ + recaptchaToken?: Scalars['String']; +} +export interface CreateProductReviewOutput { + /** Contains the completed product review */ + review: ProductReview; +} +/** Required fields for Payflow Pro and Payments Pro credit card payments */ +export interface CreditCardDetailsInput { + /** Credit card expiration month */ + cc_exp_month: Scalars['Int']; + /** Credit card expiration year */ + cc_exp_year: Scalars['Int']; + /** Last 4 digits of the credit card */ + cc_last_4: Scalars['Int']; + /** Credit card type */ + cc_type: Scalars['String']; +} +/** Credit memo details */ +export interface CreditMemo { + /** Comments on the credit memo */ + comments?: Maybe>>; + /** The unique ID for a `CreditMemo` object */ + id: Scalars['ID']; + /** An array containing details about refunded items */ + items?: Maybe>>; + /** The sequential credit memo number */ + number: Scalars['String']; + /** Contains details about the total refunded amount */ + total?: Maybe; +} +export interface CreditMemoItem extends CreditMemoItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `CreditMemoItemInterface` object */ + id: Scalars['ID']; + /** The order item the credit memo is applied to */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product, including selected options */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** The number of refunded items */ + quantity_refunded?: Maybe; +} +/** Credit memo item details */ +export interface CreditMemoItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `CreditMemoItemInterface` object */ + id: Scalars['ID']; + /** The order item the credit memo is applied to */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product, including selected options */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** The number of refunded items */ + quantity_refunded?: Maybe; +} +/** Credit memo price details */ +export interface CreditMemoTotal { + /** An adjustment manually applied to the order */ + adjustment: Money; + /** The final base grand total amount in the base currency */ + base_grand_total: Money; + /** The applied discounts to the credit memo */ + discounts?: Maybe>>; + /** The final total amount, including shipping, discounts, and taxes */ + grand_total: Money; + /** Contains details about the shipping and handling costs for the credit memo */ + shipping_handling?: Maybe; + /** The subtotal of the invoice, excluding shipping, discounts, and taxes */ + subtotal: Money; + /** The credit memo tax details */ + taxes?: Maybe>>; + /** The shipping amount for the credit memo */ + total_shipping: Money; + /** The amount of tax applied to the credit memo */ + total_tax: Money; +} +export interface Currency { + available_currency_codes?: Maybe>>; + base_currency_code?: Maybe; + base_currency_symbol?: Maybe; + /** @deprecated Symbol was missed. Use `default_display_currency_code`. */ + default_display_currecy_code?: Maybe; + /** @deprecated Symbol was missed. Use `default_display_currency_symbol`. */ + default_display_currecy_symbol?: Maybe; + default_display_currency_code?: Maybe; + default_display_currency_symbol?: Maybe; + exchange_rates?: Maybe>>; +} +/** The list of available currency codes */ +export declare enum CurrencyEnum { + Aed = 'AED', + Afn = 'AFN', + All = 'ALL', + Amd = 'AMD', + Ang = 'ANG', + Aoa = 'AOA', + Ars = 'ARS', + Aud = 'AUD', + Awg = 'AWG', + Azm = 'AZM', + Azn = 'AZN', + Bam = 'BAM', + Bbd = 'BBD', + Bdt = 'BDT', + Bgn = 'BGN', + Bhd = 'BHD', + Bif = 'BIF', + Bmd = 'BMD', + Bnd = 'BND', + Bob = 'BOB', + Brl = 'BRL', + Bsd = 'BSD', + Btn = 'BTN', + Buk = 'BUK', + Bwp = 'BWP', + Byn = 'BYN', + Bzd = 'BZD', + Cad = 'CAD', + Cdf = 'CDF', + Che = 'CHE', + Chf = 'CHF', + Chw = 'CHW', + Clp = 'CLP', + Cny = 'CNY', + Cop = 'COP', + Crc = 'CRC', + Cup = 'CUP', + Cve = 'CVE', + Czk = 'CZK', + Djf = 'DJF', + Dkk = 'DKK', + Dop = 'DOP', + Dzd = 'DZD', + Eek = 'EEK', + Egp = 'EGP', + Ern = 'ERN', + Etb = 'ETB', + Eur = 'EUR', + Fjd = 'FJD', + Fkp = 'FKP', + Gbp = 'GBP', + Gek = 'GEK', + Gel = 'GEL', + Ghs = 'GHS', + Gip = 'GIP', + Gmd = 'GMD', + Gnf = 'GNF', + Gqe = 'GQE', + Gtq = 'GTQ', + Gyd = 'GYD', + Hkd = 'HKD', + Hnl = 'HNL', + Hrk = 'HRK', + Htg = 'HTG', + Huf = 'HUF', + Idr = 'IDR', + Ils = 'ILS', + Inr = 'INR', + Iqd = 'IQD', + Irr = 'IRR', + Isk = 'ISK', + Jmd = 'JMD', + Jod = 'JOD', + Jpy = 'JPY', + Kes = 'KES', + Kgs = 'KGS', + Khr = 'KHR', + Kmf = 'KMF', + Kpw = 'KPW', + Krw = 'KRW', + Kwd = 'KWD', + Kyd = 'KYD', + Kzt = 'KZT', + Lak = 'LAK', + Lbp = 'LBP', + Lkr = 'LKR', + Lrd = 'LRD', + Lsl = 'LSL', + Lsm = 'LSM', + Ltl = 'LTL', + Lvl = 'LVL', + Lyd = 'LYD', + Mad = 'MAD', + Mdl = 'MDL', + Mga = 'MGA', + Mkd = 'MKD', + Mmk = 'MMK', + Mnt = 'MNT', + Mop = 'MOP', + Mro = 'MRO', + Mur = 'MUR', + Mvr = 'MVR', + Mwk = 'MWK', + Mxn = 'MXN', + Myr = 'MYR', + Mzn = 'MZN', + Nad = 'NAD', + Ngn = 'NGN', + Nic = 'NIC', + Nok = 'NOK', + Npr = 'NPR', + Nzd = 'NZD', + Omr = 'OMR', + Pab = 'PAB', + Pen = 'PEN', + Pgk = 'PGK', + Php = 'PHP', + Pkr = 'PKR', + Pln = 'PLN', + Pyg = 'PYG', + Qar = 'QAR', + Rhd = 'RHD', + Rol = 'ROL', + Ron = 'RON', + Rsd = 'RSD', + Rub = 'RUB', + Rwf = 'RWF', + Sar = 'SAR', + Sbd = 'SBD', + Scr = 'SCR', + Sdg = 'SDG', + Sek = 'SEK', + Sgd = 'SGD', + Shp = 'SHP', + Skk = 'SKK', + Sll = 'SLL', + Sos = 'SOS', + Srd = 'SRD', + Std = 'STD', + Svc = 'SVC', + Syp = 'SYP', + Szl = 'SZL', + Thb = 'THB', + Tjs = 'TJS', + Tmm = 'TMM', + Tnd = 'TND', + Top = 'TOP', + Trl = 'TRL', + Try = 'TRY', + Ttd = 'TTD', + Twd = 'TWD', + Tzs = 'TZS', + Uah = 'UAH', + Ugx = 'UGX', + Usd = 'USD', + Uyu = 'UYU', + Uzs = 'UZS', + Veb = 'VEB', + Vef = 'VEF', + Vnd = 'VND', + Vuv = 'VUV', + Wst = 'WST', + Xcd = 'XCD', + Xof = 'XOF', + Xpf = 'XPF', + Yer = 'YER', + Ytl = 'YTL', + Zar = 'ZAR', + Zmk = 'ZMK', + Zwd = 'ZWD', +} +/** CustomAttributeMetadata defines an array of attribute_codes and entity_types */ +export interface CustomAttributeMetadata { + /** An array of attributes */ + items?: Maybe>>; +} +/** Customer defines the customer name and address and other details */ +export interface Customer { + /** An array containing the customer's shipping and billing addresses */ + addresses?: Maybe>>; + /** Indicates whether the customer has enabled remote shopping assistance */ + allow_remote_shopping_assistance: Scalars['Boolean']; + /** The contents of the customer's compare list */ + compare_list?: Maybe; + /** Timestamp indicating when the account was created */ + created_at?: Maybe; + /** The customer's date of birth */ + date_of_birth?: Maybe; + /** The ID assigned to the billing address */ + default_billing?: Maybe; + /** The ID assigned to the shipping address */ + default_shipping?: Maybe; + /** + * The customer's date of birth + * @deprecated Use `date_of_birth` instead + */ + dob?: Maybe; + /** The customer's email address. Required */ + email?: Maybe; + /** The customer's first name */ + firstname?: Maybe; + /** The customer's gender (Male - 1, Female - 2) */ + gender?: Maybe; + /** @deprecated Customer group should not be exposed in the storefront scenarios */ + group_id?: Maybe; + /** + * The ID assigned to the customer + * @deprecated id is not needed as part of Customer because on server side it can be identified based on customer token used for authentication. There is no need to know customer ID on the client side. + */ + id?: Maybe; + /** Indicates whether the customer is subscribed to the company's newsletter */ + is_subscribed?: Maybe; + /** The customer's family name */ + lastname?: Maybe; + /** The customer's middle name */ + middlename?: Maybe; + orders?: Maybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: Maybe; + /** Contains the customer's product reviews */ + reviews: ProductReviews; + /** A value such as Sr., Jr., or III */ + suffix?: Maybe; + /** The customer's Value-added tax (VAT) number (for corporate customers) */ + taxvat?: Maybe; + /** + * Contains a customer's wish lists + * @deprecated Use `Customer.wishlists` or `Customer.wishlist_v2` + */ + wishlist: Wishlist; + /** Retrieve the specified wish list identified by the unique ID for a `Wishlist` object */ + wishlist_v2?: Maybe; + /** An array of wishlists. In Magento Open Source, customers are limited to one wish list. The number of wish lists is configurable for Magento Commerce */ + wishlists: Array>; +} +/** Customer defines the customer name and address and other details */ +export interface CustomerOrdersArgs { + currentPage?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; +} +/** Customer defines the customer name and address and other details */ +export interface CustomerReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} + +/** Customer defines the customer name and address and other details */ +export interface CustomerWishlistsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +/** CustomerAddress contains detailed information about a customer's billing and shipping addresses */ +export interface CustomerAddress { + /** The city or town */ + city?: Maybe; + /** The customer's company */ + company?: Maybe; + /** The customer's country */ + country_code?: Maybe; + /** + * The customer's country + * @deprecated Use `country_code` instead. + */ + country_id?: Maybe; + /** @deprecated Custom attributes should not be put into container */ + custom_attributes?: Maybe>>; + /** + * The customer ID + * @deprecated customer_id is not needed as part of CustomerAddress, address ID (id) is unique identifier for the addresses. + */ + customer_id?: Maybe; + /** Indicates whether the address is the default billing address */ + default_billing?: Maybe; + /** Indicates whether the address is the default shipping address */ + default_shipping?: Maybe; + /** Address extension attributes */ + extension_attributes?: Maybe>>; + /** The fax number */ + fax?: Maybe; + /** The first name of the person associated with the shipping/billing address */ + firstname?: Maybe; + /** The ID assigned to the address object */ + id?: Maybe; + /** The family name of the person associated with the shipping/billing address */ + lastname?: Maybe; + /** The middle name of the person associated with the shipping/billing address */ + middlename?: Maybe; + /** The customer's ZIP or postal code */ + postcode?: Maybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: Maybe; + /** An object containing the region name, region code, and region ID */ + region?: Maybe; + /** The unique ID for a pre-defined region */ + region_id?: Maybe; + /** An array of strings that define the street number and name */ + street?: Maybe>>; + /** A value such as Sr., Jr., or III */ + suffix?: Maybe; + /** The telephone number */ + telephone?: Maybe; + /** The customer's Value-added tax (VAT) number (for corporate customers) */ + vat_id?: Maybe; +} +export interface CustomerAddressAttribute { + /** Attribute code */ + attribute_code?: Maybe; + /** Attribute value */ + value?: Maybe; +} +export interface CustomerAddressAttributeInput { + /** Attribute code */ + attribute_code: Scalars['String']; + /** Attribute value */ + value: Scalars['String']; +} +export interface CustomerAddressInput { + /** The city or town */ + city?: InputMaybe; + /** The customer's company */ + company?: InputMaybe; + /** The customer's country */ + country_code?: InputMaybe; + /** Deprecated: use `country_code` instead. */ + country_id?: InputMaybe; + /** Deprecated: Custom attributes should not be put into container. */ + custom_attributes?: InputMaybe>>; + /** Indicates whether the address is the default billing address */ + default_billing?: InputMaybe; + /** Indicates whether the address is the default shipping address */ + default_shipping?: InputMaybe; + /** The fax number */ + fax?: InputMaybe; + /** The first name of the person associated with the shipping/billing address */ + firstname?: InputMaybe; + /** The family name of the person associated with the shipping/billing address */ + lastname?: InputMaybe; + /** The middle name of the person associated with the shipping/billing address */ + middlename?: InputMaybe; + /** The customer's ZIP or postal code */ + postcode?: InputMaybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: InputMaybe; + /** An object containing the region name, region code, and region ID */ + region?: InputMaybe; + /** An array of strings that define the street number and name */ + street?: InputMaybe>>; + /** A value such as Sr., Jr., or III */ + suffix?: InputMaybe; + /** The telephone number */ + telephone?: InputMaybe; + /** The customer's Tax/VAT number (for corporate customers) */ + vat_id?: InputMaybe; +} +/** CustomerAddressRegion defines the customer's state or province */ +export interface CustomerAddressRegion { + /** The state or province name */ + region?: Maybe; + /** The address region code */ + region_code?: Maybe; + /** The unique ID for a pre-defined region */ + region_id?: Maybe; +} +/** CustomerAddressRegionInput defines the customer's state or province */ +export interface CustomerAddressRegionInput { + /** The state or province name */ + region?: InputMaybe; + /** The address region code */ + region_code?: InputMaybe; + /** The unique ID for a pre-defined region */ + region_id?: InputMaybe; +} +export interface CustomerCreateInput { + /** Indicates whether the customer has enabled remote shopping assistance */ + allow_remote_shopping_assistance?: InputMaybe; + /** The customer's date of birth */ + date_of_birth?: InputMaybe; + /** Deprecated: Use `date_of_birth` instead */ + dob?: InputMaybe; + /** The customer's email address. Required for customer creation */ + email: Scalars['String']; + /** The customer's first name */ + firstname: Scalars['String']; + /** The customer's gender (Male - 1, Female - 2) */ + gender?: InputMaybe; + /** Indicates whether the customer is subscribed to the company's newsletter */ + is_subscribed?: InputMaybe; + /** The customer's family name */ + lastname: Scalars['String']; + /** The customer's middle name */ + middlename?: InputMaybe; + /** The customer's password */ + password?: InputMaybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: InputMaybe; + /** A value such as Sr., Jr., or III */ + suffix?: InputMaybe; + /** The customer's Tax/VAT number (for corporate customers) */ + taxvat?: InputMaybe; + /** The reCaptcha Token */ + recaptchaToken?: InputMaybe; +} +export interface CustomerDownloadableProduct { + date?: Maybe; + download_url?: Maybe; + order_increment_id?: Maybe; + remaining_downloads?: Maybe; + status?: Maybe; +} +export interface CustomerDownloadableProducts { + /** List of purchased downloadable items */ + items?: Maybe>>; +} +export interface CustomerInput { + /** The customer's date of birth */ + date_of_birth?: InputMaybe; + /** Deprecated: Use `date_of_birth` instead */ + dob?: InputMaybe; + /** The customer's email address. Required for customer creation */ + email?: InputMaybe; + /** The customer's first name */ + firstname?: InputMaybe; + /** The customer's gender (Male - 1, Female - 2) */ + gender?: InputMaybe; + /** Indicates whether the customer is subscribed to the company's newsletter */ + is_subscribed?: InputMaybe; + /** The customer's family name */ + lastname?: InputMaybe; + /** The customer's middle name */ + middlename?: InputMaybe; + /** The customer's password */ + password?: InputMaybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: InputMaybe; + /** A value such as Sr., Jr., or III */ + suffix?: InputMaybe; + /** The customer's Tax/VAT number (for corporate customers) */ + taxvat?: InputMaybe; +} +/** Contains details about each of the customer's orders */ +export interface CustomerOrder { + /** The billing address for the order */ + billing_address?: Maybe; + /** The shipping carrier for the order delivery */ + carrier?: Maybe; + /** Comments about the order */ + comments?: Maybe>>; + /** @deprecated Use the order_date attribute instead */ + created_at?: Maybe; + /** A list of credit memos */ + credit_memos?: Maybe>>; + /** The entered gift message for the order */ + gift_message?: Maybe; + /** @deprecated Use the totals.grand_total attribute instead */ + grand_total?: Maybe; + /** The unique ID for a `CustomerOrder` object */ + id: Scalars['ID']; + /** @deprecated Use the id attribute instead */ + increment_id?: Maybe; + /** A list of invoices for the order */ + invoices: Array>; + /** An array containing the items purchased in this order */ + items?: Maybe>>; + /** The order number */ + number: Scalars['String']; + /** The date the order was placed */ + order_date: Scalars['String']; + /** @deprecated Use the number attribute instead */ + order_number: Scalars['String']; + /** Payment details for the order */ + payment_methods?: Maybe>>; + /** A list of shipments for the order */ + shipments?: Maybe>>; + /** The shipping address for the order */ + shipping_address?: Maybe; + /** The delivery method for the order */ + shipping_method?: Maybe; + /** The current status of the order */ + status: Scalars['String']; + /** Contains details about the calculated totals for this order */ + total?: Maybe; +} +/** The collection of orders that match the conditions defined in the filter */ +export interface CustomerOrders { + /** An array of customer orders */ + items: Array>; + /** An object that includes the current_page, page_info, and page_size values specified in the query */ + page_info?: Maybe; + /** The total count of customer orders */ + total_count?: Maybe; +} +/** Identifies the filter to use for filtering orders. */ +export interface CustomerOrdersFilterInput { + /** Filters by order number. */ + number?: InputMaybe; +} +export interface CustomerOutput { + customer: Customer; +} +export interface CustomerPaymentTokens { + /** An array of payment tokens */ + items: Array>; +} +export interface CustomerToken { + /** The customer token */ + token?: Maybe; +} +export interface CustomerUpdateInput { + /** Indicates whether the customer has enabled remote shopping assistance */ + allow_remote_shopping_assistance?: InputMaybe; + /** The customer's date of birth */ + date_of_birth?: InputMaybe; + /** Deprecated: Use `date_of_birth` instead */ + dob?: InputMaybe; + /** The customer's first name */ + firstname?: InputMaybe; + /** The customer's gender (Male - 1, Female - 2) */ + gender?: InputMaybe; + /** Indicates whether the customer is subscribed to the company's newsletter */ + is_subscribed?: InputMaybe; + /** The customer's family name */ + lastname?: InputMaybe; + /** The customer's middle name */ + middlename?: InputMaybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: InputMaybe; + /** A value such as Sr., Jr., or III */ + suffix?: InputMaybe; + /** The customer's Tax/VAT number (for corporate customers) */ + taxvat?: InputMaybe; +} +/** CustomizableAreaOption contains information about a text area that is defined as part of a customizable option. */ +export interface CustomizableAreaOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** The Stock Keeping Unit of the base product. */ + product_sku?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An object that defines a text area. */ + value?: Maybe; +} +/** CustomizableAreaValue defines the price and sku of a product whose page contains a customized text area. */ +export interface CustomizableAreaValue { + /** The maximum number of characters that can be entered for this customizable option. */ + max_characters?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The unique ID for a `CustomizableAreaValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableCheckbbixOption contains information about a set of checkbox values that are defined as part of a customizable option. */ +export interface CustomizableCheckboxOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An array that defines a set of checkbox values. */ + value?: Maybe>>; +} +/** CustomizableCheckboxValue defines the price and sku of a product whose page contains a customized set of checkbox values. */ +export interface CustomizableCheckboxValue { + /** The ID assigned to the value. */ + option_type_id?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The order in which the checkbox value is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableCheckboxValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableDateOption contains information about a date picker that is defined as part of a customizable option. */ +export interface CustomizableDateOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** The Stock Keeping Unit of the base product. */ + product_sku?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An object that defines a date field in a customizable option. */ + value?: Maybe; +} +/** This enumeration customizable date type. */ +export declare enum CustomizableDateTypeEnum { + Date = 'DATE', + DateTime = 'DATE_TIME', + Time = 'TIME', +} +/** CustomizableDateValue defines the price and sku of a product whose page contains a customized date picker. */ +export interface CustomizableDateValue { + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** DATE, DATE_TIME or TIME */ + type?: Maybe; + /** The unique ID for a `CustomizableDateValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableDropDownOption contains information about a drop down menu that is defined as part of a customizable option. */ +export interface CustomizableDropDownOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An array that defines the set of options for a drop down menu. */ + value?: Maybe>>; +} +/** CustomizableDropDownValue defines the price and sku of a product whose page contains a customized drop down menu. */ +export interface CustomizableDropDownValue { + /** The ID assigned to the value. */ + option_type_id?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableDropDownValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableFieldOption contains information about a text field that is defined as part of a customizable option. */ +export interface CustomizableFieldOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** The Stock Keeping Unit of the base product. */ + product_sku?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An object that defines a text field. */ + value?: Maybe; +} +/** CustomizableFieldValue defines the price and sku of a product whose page contains a customized text field. */ +export interface CustomizableFieldValue { + /** The maximum number of characters that can be entered for this customizable option. */ + max_characters?: Maybe; + /** The price of the custom value. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The unique ID for a `CustomizableFieldValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableFileOption contains information about a file picker that is defined as part of a customizable option. */ +export interface CustomizableFileOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** The Stock Keeping Unit of the base product. */ + product_sku?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An object that defines a file value. */ + value?: Maybe; +} +/** CustomizableFileValue defines the price and sku of a product whose page contains a customized file picker. */ +export interface CustomizableFileValue { + /** The file extension to accept. */ + file_extension?: Maybe; + /** The maximum width of an image. */ + image_size_x?: Maybe; + /** The maximum height of an image. */ + image_size_y?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The unique ID for a `CustomizableFileValue` object. */ + uid: Scalars['ID']; +} +/** CustomizableMultipleOption contains information about a multiselect that is defined as part of a customizable option. */ +export interface CustomizableMultipleOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An array that defines the set of options for a multiselect. */ + value?: Maybe>>; +} +/** CustomizableMultipleValue defines the price and sku of a product whose page contains a customized multiselect. */ +export interface CustomizableMultipleValue { + /** The ID assigned to the value. */ + option_type_id?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableMultipleValue` object. */ + uid: Scalars['ID']; +} +export interface CustomizableOptionInput { + /** The customizable option id of the product */ + id?: InputMaybe; + /** The string value of the option */ + value_string: Scalars['String']; +} +/** The CustomizableOptionInterface contains basic information about a customizable option. It can be implemented by several types of configurable options. */ +export interface CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; +} +/** CustomizableProductInterface contains information about customizable product options. */ +export interface CustomizableProductInterface { + /** An array of options for a customizable product. */ + options?: Maybe>>; +} +/** CustomizableRadioOption contains information about a set of radio buttons that are defined as part of a customizable option. */ +export interface CustomizableRadioOption extends CustomizableOptionInterface { + /** + * Option ID. + * @deprecated Use `uid` instead + */ + option_id?: Maybe; + /** Indicates whether the option is required. */ + required?: Maybe; + /** The order in which the option is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableOptionInterface` object. */ + uid: Scalars['ID']; + /** An array that defines a set of radio buttons. */ + value?: Maybe>>; +} +/** CustomizableRadioValue defines the price and sku of a product whose page contains a customized set of radio buttons. */ +export interface CustomizableRadioValue { + /** The ID assigned to the value. */ + option_type_id?: Maybe; + /** The price assigned to this option. */ + price?: Maybe; + /** FIXED, PERCENT, or DYNAMIC. */ + price_type?: Maybe; + /** The Stock Keeping Unit for this option. */ + sku?: Maybe; + /** The order in which the radio button is displayed. */ + sort_order?: Maybe; + /** The display name for this option. */ + title?: Maybe; + /** The unique ID for a `CustomizableRadioValue` object. */ + uid: Scalars['ID']; +} +export interface DeleteCompareListOutput { + /** Indicates whether the compare list was successfully deleted */ + result: Scalars['Boolean']; +} +export interface DeletePaymentTokenOutput { + customerPaymentTokens?: Maybe; + result: Scalars['Boolean']; +} +/** Defines an individual discount. A discount can be applied to the cart as a whole or to an item. */ +export interface Discount { + /** The amount of the discount */ + amount: Money; + /** A description of the discount */ + label: Scalars['String']; +} +/** Downloadable Cart Item */ +export interface DownloadableCartItem extends CartItemInterface { + customizable_options: Array>; + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + /** An array containing information about the links for the added to cart downloadable product */ + links?: Maybe>>; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** DownloadableProductSamples defines characteristics of a downloadable product */ + samples?: Maybe>>; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +export interface DownloadableCreditMemoItem extends CreditMemoItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** A list of downloadable links that are refunded from the downloadable product */ + downloadable_links?: Maybe>>; + /** The unique ID for a `CreditMemoItemInterface` object */ + id: Scalars['ID']; + /** The order item the credit memo is applied to */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product, including selected options */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** The number of refunded items */ + quantity_refunded?: Maybe; +} +export declare enum DownloadableFileTypeEnum { + File = 'FILE', + Url = 'URL', +} +export interface DownloadableInvoiceItem extends InvoiceItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** A list of downloadable links that are invoiced from the downloadable product */ + downloadable_links?: Maybe>>; + /** The unique ID for a `InvoiceItemInterface` object */ + id: Scalars['ID']; + /** Contains details about an individual order item */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; +} +/** DownloadableProductLinks defines characteristics of a downloadable product */ +export interface DownloadableItemsLinks { + /** A number indicating the sort order */ + sort_order?: Maybe; + /** The display name of the link */ + title?: Maybe; + /** The unique ID for a `DownloadableItemsLinks` object. */ + uid: Scalars['ID']; +} +export interface DownloadableOrderItem extends OrderItemInterface { + /** The final discount information for the product */ + discounts?: Maybe>>; + /** A list of downloadable links that are ordered from the downloadable product */ + downloadable_links?: Maybe>>; + /** The entered option for the base product, such as a logo or image */ + entered_options?: Maybe>>; + /** The unique ID for a `OrderItemInterface` object */ + id: Scalars['ID']; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price of the base product, including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The type of product, such as simple, configurable, etc. */ + product_type?: Maybe; + /** URL key of the base product */ + product_url_key?: Maybe; + /** The number of canceled items */ + quantity_canceled?: Maybe; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; + /** The number of units ordered for this item */ + quantity_ordered?: Maybe; + /** The number of refunded items */ + quantity_refunded?: Maybe; + /** The number of returned items */ + quantity_returned?: Maybe; + /** The number of shipped items */ + quantity_shipped?: Maybe; + /** The selected options for the base product, such as color or size */ + selected_options?: Maybe>>; + /** The status of the order item */ + status?: Maybe; +} +/** DownloadableProduct defines a product that the shopper downloads */ +export interface DownloadableProduct extends CustomizableProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + /** An array containing information about the links for this downloadable product */ + downloadable_product_links?: Maybe>>; + /** An array containing information about samples of this downloadable product. */ + downloadable_product_samples?: Maybe>>; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** A value of 1 indicates that each link in the array must be purchased separately */ + links_purchased_separately?: Maybe; + /** The heading above the list of downloadable products */ + links_title?: Maybe; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** An array of options for a customizable product. */ + options?: Maybe>>; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; +} +/** DownloadableProduct defines a product that the shopper downloads */ +export interface DownloadableProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +export interface DownloadableProductCartItemInput { + customizable_options?: InputMaybe>>; + data: CartItemInput; + downloadable_product_links?: InputMaybe>>; +} +/** DownloadableProductLinks defines characteristics of a downloadable product */ +export interface DownloadableProductLinks { + /** @deprecated This information should not be exposed on frontend */ + id?: Maybe; + /** @deprecated This information should not be exposed on frontend */ + is_shareable?: Maybe; + /** @deprecated `sample_url` serves to get the downloadable sample */ + link_type?: Maybe; + /** @deprecated This information should not be exposed on frontend */ + number_of_downloads?: Maybe; + /** The price of the downloadable product */ + price?: Maybe; + /** @deprecated `sample_url` serves to get the downloadable sample */ + sample_file?: Maybe; + /** @deprecated `sample_url` serves to get the downloadable sample */ + sample_type?: Maybe; + /** URL to the downloadable sample */ + sample_url?: Maybe; + /** A number indicating the sort order */ + sort_order?: Maybe; + /** The display name of the link */ + title?: Maybe; + /** The unique ID for a `DownloadableProductLinks` object. */ + uid: Scalars['ID']; +} +export interface DownloadableProductLinksInput { + link_id: Scalars['Int']; +} +/** DownloadableProductSamples defines characteristics of a downloadable product */ +export interface DownloadableProductSamples { + /** @deprecated This information should not be exposed on frontend */ + id?: Maybe; + /** @deprecated `sample_url` serves to get the downloadable sample */ + sample_file?: Maybe; + /** @deprecated `sample_url` serves to get the downloadable sample */ + sample_type?: Maybe; + /** URL to the downloadable sample */ + sample_url?: Maybe; + /** A number indicating the sort order */ + sort_order?: Maybe; + /** The display name of the sample */ + title?: Maybe; +} +/** A downloadable product wish list item */ +export interface DownloadableWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** An array containing information about the selected links */ + links_v2?: Maybe>>; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; + /** An array containing information about the selected samples */ + samples?: Maybe>>; +} +/** Defines a customer-entered option */ +export interface EnteredOptionInput { + /** The unique ID for a `CustomizableFieldOption`, `CustomizableFileOption`, `CustomizableAreaOption`, etc. of `CustomizableOptionInterface` objects */ + uid: Scalars['ID']; + /** Text the customer entered */ + value: Scalars['String']; +} +/** + * + * is an output object containing the `id`, `relative_url`, and `type` attributes */ +export interface EntityUrl { + /** @deprecated The canonical_url field is deprecated, use relative_url instead. */ + canonical_url?: Maybe; + /** The unique ID for a `ProductInterface`, `CategoryInterface`, `CmsPage`, etc. object associated with the specified url. This could be a product UID, category UID, or cms page UID. */ + entity_uid?: Maybe; + /** + * The ID assigned to the object associated with the specified url. This could be a product ID, category ID, or page ID. + * @deprecated Use `entity_uid` instead. + */ + id?: Maybe; + /** 301 or 302 HTTP code for url permanent or temporary redirect or 0 for the 200 no redirect */ + redirectCode?: Maybe; + /** The internal relative URL. If the specified url is a redirect, the query returns the redirected URL, not the original. */ + relative_url?: Maybe; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; +} +export interface ExchangeRate { + currency_to?: Maybe; + rate?: Maybe; +} +/** Defines a filter that matches the input exactly. */ +export interface FilterEqualTypeInput { + /** A string to filter on */ + eq?: InputMaybe; + /** An array of values to filter on */ + in?: InputMaybe>>; +} +/** Defines a filter that performs a fuzzy search. */ +export interface FilterMatchTypeInput { + /** One or more words to filter on */ + match?: InputMaybe; +} +/** Defines a filter that matches a range of values, such as prices or dates. */ +export interface FilterRangeTypeInput { + /** The beginning of the range */ + from?: InputMaybe; + /** The end of the range */ + to?: InputMaybe; +} +/** Defines a filter for an input string. */ +export interface FilterStringTypeInput { + /** Filters items that are exactly the same as the specified string. */ + eq?: InputMaybe; + /** Filters items that are exactly the same as entries specified in an array of strings. */ + in?: InputMaybe>>; + /** Defines a filter that performs a fuzzy search using the specified string. */ + match?: InputMaybe; +} +/** FilterTypeInput specifies which action will be performed in a query */ +export interface FilterTypeInput { + /** Equals */ + eq?: InputMaybe; + finset?: InputMaybe>>; + /** From. Must be used with 'to' */ + from?: InputMaybe; + /** Greater than */ + gt?: InputMaybe; + /** Greater than or equal to */ + gteq?: InputMaybe; + /** In. The value can contain a set of comma-separated values */ + in?: InputMaybe>>; + /** Like. The specified value can contain % (percent signs) to allow matching of 0 or more characters */ + like?: InputMaybe; + /** Less than */ + lt?: InputMaybe; + /** Less than or equal to */ + lteq?: InputMaybe; + /** More than or equal to */ + moreq?: InputMaybe; + /** Not equal to */ + neq?: InputMaybe; + /** Not in. The value can contain a set of comma-separated values */ + nin?: InputMaybe>>; + /** Not null */ + notnull?: InputMaybe; + /** Is null */ + null?: InputMaybe; + /** To. Must be used with 'from' */ + to?: InputMaybe; +} +/** A single FPT that can be applied to a product price. */ +export interface FixedProductTax { + /** Amount of the FPT as a money object. */ + amount?: Maybe; + /** The label assigned to the FPT to be displayed on the frontend. */ + label?: Maybe; +} +/** This enumeration display settings for the fixed product tax */ +export declare enum FixedProductTaxDisplaySettings { + /** The displayed price does not include the FPT amount. The values of ProductPrice.fixed_product_taxes and the price including the FPT are displayed separately. This value corresponds to 'Excluding FPT, Including FPT description and final price' */ + ExcludeFptAndIncludeWithDetails = 'EXCLUDE_FPT_AND_INCLUDE_WITH_DETAILS', + /** The displayed price does not include the FPT amount. The values from ProductPrice.fixed_product_taxes are not displayed. This value corresponds to 'Excluding FPT' */ + ExcludeFptWithoutDetails = 'EXCLUDE_FPT_WITHOUT_DETAILS', + /** The FPT feature is not enabled. You can omit ProductPrice.fixed_product_taxes from your query */ + FptDisabled = 'FPT_DISABLED', + /** The displayed price includes the FPT amount without displaying the ProductPrice.fixed_product_taxes values. This value corresponds to 'Including FPT only' */ + IncludeFptWithoutDetails = 'INCLUDE_FPT_WITHOUT_DETAILS', + /** The displayed price includes the FPT amount while displaying the values of ProductPrice.fixed_product_taxes separately. This value corresponds to 'Including FPT and FPT description' */ + IncludeFptWithDetails = 'INCLUDE_FPT_WITH_DETAILS', +} +export interface GenerateCustomerTokenAsAdminInput { + /** The email address of the customer requesting remote shopping assistance */ + customer_email: Scalars['String']; +} +export interface GenerateCustomerTokenAsAdminOutput { + /** The generated customer token */ + customer_token: Scalars['String']; +} +/** Contains the text of a gift message, its sender, and recipient */ +export interface GiftMessage { + /** Sender name */ + from: Scalars['String']; + /** Gift message text */ + message: Scalars['String']; + /** Recipient name */ + to: Scalars['String']; +} +/** Contains the text of a gift message, its sender, and recipient */ +export interface GiftMessageInput { + /** Sender name */ + from: Scalars['String']; + /** Gift message text */ + message: Scalars['String']; + /** Recipient name */ + to: Scalars['String']; +} +/** A grouped product consists of simple standalone products that are presented as a group */ +export interface GroupedProduct extends PhysicalProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** An array containing grouped product items */ + items?: Maybe>>; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; + /** The weight of the item, in units defined by the store. */ + weight?: Maybe; +} +/** A grouped product consists of simple standalone products that are presented as a group */ +export interface GroupedProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +/** GroupedProductItem contains information about an individual grouped product item */ +export interface GroupedProductItem { + /** The relative position of this item compared to the other group items */ + position?: Maybe; + /** The ProductInterface object, which contains details about this product option */ + product?: Maybe; + /** The quantity of this grouped product item */ + qty?: Maybe; +} +/** A grouped product wish list item */ +export interface GroupedProductWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +/** A set of relative URLs that PayPal will use in response to various actions during the authorization process. Magento prepends the base URL to this value to create a full URL. For example, if the full URL is https://www.example.com/path/to/page.html, the relative URL is path/to/page.html. Use this input for Payments Pro Hosted Solution payment method. */ +export interface HostedProInput { + /** The relative URL of the page that PayPal will redirect to when the buyer cancels the transaction in order to choose a different payment method. If the full URL to this page is https://www.example.com/paypal/action/cancel.html, the relative URL is paypal/action/cancel.html. */ + cancel_url: Scalars['String']; + /** The relative URL of the final confirmation page that PayPal will redirect to upon payment success. If the full URL to this page is https://www.example.com/paypal/action/return.html, the relative URL is paypal/action/return.html. */ + return_url: Scalars['String']; +} +/** Contains secure URL used for Payments Pro Hosted Solution payment method. */ +export interface HostedProUrl { + /** Secure Url generated by PayPal */ + secure_form_url?: Maybe; +} +/** The required input to request the secure URL for Payments Pro Hosted Solution payment. */ +export interface HostedProUrlInput { + /** The unique ID that identifies the customer's cart */ + cart_id: Scalars['String']; +} +/** The object details of target path parameters */ +export interface HttpQueryParameter { + /** Parameter name */ + name?: Maybe; + /** Parameter value */ + value?: Maybe; +} +export interface ImageSwatchData extends SwatchDataInterface { + /** Thumbnail swatch image URL */ + thumbnail?: Maybe; + /** Value of swatch item (HEX color code, image link or textual value) */ + value?: Maybe; +} +/** Invoice details */ +export interface Invoice { + /** Comments on the invoice */ + comments?: Maybe>>; + /** The unique ID for a `Invoice` object */ + id: Scalars['ID']; + /** Invoiced product details */ + items?: Maybe>>; + /** Sequential invoice number */ + number: Scalars['String']; + /** Invoice total amount details */ + total?: Maybe; +} +export interface InvoiceItem extends InvoiceItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `InvoiceItemInterface` object */ + id: Scalars['ID']; + /** Contains details about an individual order item */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; +} +/** Invoice item details */ +export interface InvoiceItemInterface { + /** Contains information about the final discount amount for the base product, including discounts on options */ + discounts?: Maybe>>; + /** The unique ID for a `InvoiceItemInterface` object */ + id: Scalars['ID']; + /** Contains details about an individual order item */ + order_item?: Maybe; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price for the base product including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; +} +/** Contains price details from an invoice */ +export interface InvoiceTotal { + /** The final base grand total amount in the base currency */ + base_grand_total: Money; + /** The applied discounts to the invoice */ + discounts?: Maybe>>; + /** The final total amount, including shipping, discounts, and taxes */ + grand_total: Money; + /** Contains details about the shipping and handling costs for the invoice */ + shipping_handling?: Maybe; + /** The subtotal of the invoice, excluding shipping, discounts, and taxes */ + subtotal: Money; + /** The invoice tax details */ + taxes?: Maybe>>; + /** The shipping amount for the invoice */ + total_shipping: Money; + /** The amount of tax applied to the invoice */ + total_tax: Money; +} +export interface IsConfigSettingEnabledOutput { + /** Is config setting enabled */ + is_enabled?: Maybe; +} +export interface IsEmailAvailableOutput { + /** Is email availabel value */ + is_email_available?: Maybe; +} +/** A list of options of the selected bundle product */ +export interface ItemSelectedBundleOption { + /** + * The unique ID for a `ItemSelectedBundleOption` object + * @deprecated Use `uid` instead + */ + id: Scalars['ID']; + /** The label of the option */ + label: Scalars['String']; + /** The unique ID for a `ItemSelectedBundleOption` object */ + uid: Scalars['ID']; + /** A list of products that represent the values of the parent option */ + values?: Maybe>>; +} +/** A list of values for the selected bundle product */ +export interface ItemSelectedBundleOptionValue { + /** + * The unique ID for a `ItemSelectedBundleOptionValue` object + * @deprecated Use `uid` instead + */ + id: Scalars['ID']; + /** The price of the child bundle product */ + price: Money; + /** The name of the child bundle product */ + product_name: Scalars['String']; + /** The SKU of the child bundle product */ + product_sku: Scalars['String']; + /** Indicates how many of this bundle product were ordered */ + quantity: Scalars['Float']; + /** The unique ID for a `ItemSelectedBundleOptionValue` object */ + uid: Scalars['ID']; +} +/** The key-value type */ +export interface KeyValue { + /** The name part of the name/value pair */ + name?: Maybe; + /** The value part of the name/value pair */ + value?: Maybe; +} +export interface KlarnaInput { + /** The authorization token must be provided to set any Klarna Payments method */ + authorization_token: Scalars['String']; +} +export interface LayerFilter { + /** + * Array of filter items. + * @deprecated Use Aggregation.options instead. + */ + filter_items?: Maybe>>; + /** + * Count of filter items in filter group. + * @deprecated Use Aggregation.count instead. + */ + filter_items_count?: Maybe; + /** + * Layered navigation filter name. + * @deprecated Use Aggregation.label instead. + */ + name?: Maybe; + /** + * Request variable name for filter query. + * @deprecated Use Aggregation.attribute_code instead. + */ + request_var?: Maybe; +} +export interface LayerFilterItem extends LayerFilterItemInterface { + /** + * Count of items by filter. + * @deprecated Use AggregationOption.count instead. + */ + items_count?: Maybe; + /** + * Filter label. + * @deprecated Use AggregationOption.label instead. + */ + label?: Maybe; + /** + * Value for filter request variable to be used in query. + * @deprecated Use AggregationOption.value instead. + */ + value_string?: Maybe; +} +export interface LayerFilterItemInterface { + /** + * Count of items by filter. + * @deprecated Use AggregationOption.count instead. + */ + items_count?: Maybe; + /** + * Filter label. + * @deprecated Use AggregationOption.label instead. + */ + label?: Maybe; + /** + * Value for filter request variable to be used in query. + * @deprecated Use AggregationOption.value instead. + */ + value_string?: Maybe; +} +/** MediaGalleryEntry defines characteristics about images and videos associated with a specific product. */ +export interface MediaGalleryEntry { + /** Contains a ProductMediaGalleryEntriesContent object. */ + content?: Maybe; + /** Whether the image is hidden from view. */ + disabled?: Maybe; + /** The path of the image on the server. */ + file?: Maybe; + /** + * The identifier assigned to the object. + * @deprecated Use `uid` instead. + */ + id?: Maybe; + /** The alt text displayed on the UI when the user points to the image. */ + label?: Maybe; + /** image or video. */ + media_type?: Maybe; + /** The media item's position after it has been sorted. */ + position?: Maybe; + /** Array of image types. It can have the following values: image, small_image, thumbnail. */ + types?: Maybe>>; + /** The unique ID for a `MediaGalleryEntry` object. */ + uid: Scalars['ID']; + /** Contains a ProductMediaGalleryEntriesVideoContent object. */ + video_content?: Maybe; +} +/** Contains basic information about a product image or video. */ +export interface MediaGalleryInterface { + /** Whether the image is hidden from view. */ + disabled?: Maybe; + /** The label of the product image or video. */ + label?: Maybe; + /** The media item's position after it has been sorted. */ + position?: Maybe; + /** The URL of the product image or video. */ + url?: Maybe; +} +/** A Money object defines a monetary value, including a numeric value and a currency code. */ +export interface Money { + /** A three-letter currency code, such as USD or EUR */ + currency?: Maybe; + /** A number expressing a monetary value */ + value?: Maybe; +} +export interface Mutation { + addBundleProductsToCart?: Maybe; + addConfigurableProductsToCart?: Maybe; + addDownloadableProductsToCart?: Maybe; + /** Add any type of product to the cart */ + addProductsToCart?: Maybe; + /** Add products to the specified compare list */ + addProductsToCompareList?: Maybe; + /** Adds one or more products to the specified wish list. This mutation supports all product types */ + addProductsToWishlist?: Maybe; + addSimpleProductsToCart?: Maybe; + addVirtualProductsToCart?: Maybe; + /** Add items in the specified wishlist to the customer's cart */ + addWishlistItemsToCart?: Maybe; + applyCouponToCart?: Maybe; + /** Assign the specified compare list to the logged in customer */ + assignCompareListToCustomer?: Maybe; + /** Changes the password for the logged-in customer */ + changeCustomerPassword?: Maybe; + /** Creates Client Token for Braintree Javascript SDK initialization. */ + createBraintreeClientToken: Scalars['String']; + /** Creates a new compare list. The compare list is saved for logged in customers */ + createCompareList?: Maybe; + /** Create customer account */ + createCustomer?: Maybe; + /** Create customer address */ + createCustomerAddress?: Maybe; + /** Create customer account */ + createCustomerV2?: Maybe; + /** Creates an empty shopping cart for a guest or logged in user */ + createEmptyCart?: Maybe; + /** Creates a Klarna Payments Session. */ + createKlarnaPaymentsSession?: Maybe; + /** Initiates a transaction and receives a token. Use this mutation for Payflow Pro and Payments Pro payment methods */ + createPayflowProToken?: Maybe; + /** Initiates an Express Checkout transaction and receives a token. Use this mutation for Express Checkout and Payments Standard payment methods. */ + createPaypalExpressToken?: Maybe; + /** Creates a product review for the specified SKU */ + createProductReview: CreateProductReviewOutput; + /** Delete the specified compare list */ + deleteCompareList?: Maybe; + /** Delete customer address */ + deleteCustomerAddress?: Maybe; + /** Delete a customer payment token */ + deletePaymentToken?: Maybe; + /** Retrieve the customer token */ + generateCustomerToken?: Maybe; + /** Request a customer token so that an administrator can perform remote shopping assistance */ + generateCustomerTokenAsAdmin?: Maybe; + /** Handles payment response and saves payment in Quote. Use this mutations for Payflow Pro and Payments Pro payment methods. */ + handlePayflowProResponse?: Maybe; + /** Merges the source cart into the destination cart */ + mergeCarts: Cart; + placeOrder?: Maybe; + removeCouponFromCart?: Maybe; + removeItemFromCart?: Maybe; + /** Remove products from the specified compare list */ + removeProductsFromCompareList?: Maybe; + /** Removes one or more products from the specified wish list */ + removeProductsFromWishlist?: Maybe; + /** Adds all products from a customer's previous order to the cart. */ + reorderItems?: Maybe; + /** Request an email with a reset password token for the registered customer identified by the specified email. */ + requestPasswordResetEmail?: Maybe; + /** Reset a customer's password using the reset password token that the customer received in an email after requesting it using requestPasswordResetEmail. */ + resetPassword?: Maybe; + /** Revoke the customer token */ + revokeCustomerToken?: Maybe; + /** Recommends Product by Sending Single/Multiple Email */ + sendEmailToFriend?: Maybe; + setBillingAddressOnCart?: Maybe; + setGuestEmailOnCart?: Maybe; + /** @deprecated Should use setPaymentMethodOnCart and placeOrder mutations in single request. */ + setPaymentMethodAndPlaceOrder?: Maybe; + setPaymentMethodOnCart?: Maybe; + setShippingAddressesOnCart?: Maybe; + setShippingMethodsOnCart?: Maybe; + /** Subscribes the specified email to a newsletter */ + subscribeEmailToNewsletter?: Maybe; + updateCartItems?: Maybe; + /** Sends chat profile data to Engagement Cloud. */ + updateChatProfile?: Maybe; + /** Deprecated. Use UpdateCustomerV2 instead. */ + updateCustomer?: Maybe; + /** Update customer address */ + updateCustomerAddress?: Maybe; + updateCustomerEmail?: Maybe; + /** Update the customer's personal information */ + updateCustomerV2?: Maybe; + /** Updates one or more products in the specified wish list */ + updateProductsInWishlist?: Maybe; + /** Updates the email address of a quote. */ + updateQuoteEmail?: Maybe; +} +export interface MutationAddBundleProductsToCartArgs { + input?: InputMaybe; +} +export interface MutationAddConfigurableProductsToCartArgs { + input?: InputMaybe; +} +export interface MutationAddDownloadableProductsToCartArgs { + input?: InputMaybe; +} +export interface MutationAddProductsToCartArgs { + cartId: Scalars['String']; + cartItems: Array; +} +export interface MutationAddProductsToCompareListArgs { + input?: InputMaybe; +} +export interface MutationAddProductsToWishlistArgs { + wishlistId: Scalars['ID']; + wishlistItems: Array; +} +export interface MutationAddSimpleProductsToCartArgs { + input?: InputMaybe; +} +export interface MutationAddVirtualProductsToCartArgs { + input?: InputMaybe; +} +export interface MutationAddWishlistItemsToCartArgs { + wishlistId: Scalars['ID']; + wishlistItemIds?: InputMaybe>; +} +export interface MutationApplyCouponToCartArgs { + input?: InputMaybe; +} +export interface MutationAssignCompareListToCustomerArgs { + uid: Scalars['ID']; +} +export interface MutationChangeCustomerPasswordArgs { + currentPassword: Scalars['String']; + newPassword: Scalars['String']; +} +export interface MutationCreateCompareListArgs { + input?: InputMaybe; +} +export interface MutationCreateCustomerArgs { + input: CustomerInput; +} +export interface MutationCreateCustomerAddressArgs { + input: CustomerAddressInput; +} +export interface MutationCreateCustomerV2Args { + input: CustomerCreateInput; +} +export interface MutationCreateEmptyCartArgs { + input?: InputMaybe; +} +export interface MutationCreateKlarnaPaymentsSessionArgs { + input?: InputMaybe; +} +export interface MutationCreatePayflowProTokenArgs { + input: PayflowProTokenInput; +} +export interface MutationCreatePaypalExpressTokenArgs { + input: PaypalExpressTokenInput; +} +export interface MutationCreateProductReviewArgs { + input: CreateProductReviewInput; +} +export interface MutationDeleteCompareListArgs { + uid: Scalars['ID']; +} +export interface MutationDeleteCustomerAddressArgs { + id: Scalars['Int']; +} +export interface MutationDeletePaymentTokenArgs { + public_hash: Scalars['String']; +} +export interface MutationGenerateCustomerTokenArgs { + email: Scalars['String']; + password: Scalars['String']; +} +export interface MutationGenerateCustomerTokenAsAdminArgs { + input: GenerateCustomerTokenAsAdminInput; +} +export interface MutationHandlePayflowProResponseArgs { + input: PayflowProResponseInput; +} +export interface MutationMergeCartsArgs { + destination_cart_id?: InputMaybe; + source_cart_id: Scalars['String']; +} +export interface MutationPlaceOrderArgs { + input?: InputMaybe; +} +export interface MutationRemoveCouponFromCartArgs { + input?: InputMaybe; +} +export interface MutationRemoveItemFromCartArgs { + input?: InputMaybe; +} +export interface MutationRemoveProductsFromCompareListArgs { + input?: InputMaybe; +} +export interface MutationRemoveProductsFromWishlistArgs { + wishlistId: Scalars['ID']; + wishlistItemsIds: Array; +} +export interface MutationReorderItemsArgs { + orderNumber: Scalars['String']; +} +export interface MutationRequestPasswordResetEmailArgs { + email: Scalars['String']; +} +export interface MutationResetPasswordArgs { + email: Scalars['String']; + newPassword: Scalars['String']; + resetPasswordToken: Scalars['String']; +} +export interface MutationSendEmailToFriendArgs { + input?: InputMaybe; +} +export interface MutationSetBillingAddressOnCartArgs { + input?: InputMaybe; +} +export interface MutationSetGuestEmailOnCartArgs { + input?: InputMaybe; +} +export interface MutationSetPaymentMethodAndPlaceOrderArgs { + input?: InputMaybe; +} +export interface MutationSetPaymentMethodOnCartArgs { + input?: InputMaybe; +} +export interface MutationSetShippingAddressesOnCartArgs { + input?: InputMaybe; +} +export interface MutationSetShippingMethodsOnCartArgs { + input?: InputMaybe; +} +export interface MutationSubscribeEmailToNewsletterArgs { + email: Scalars['String']; +} +export interface MutationUpdateCartItemsArgs { + input?: InputMaybe; +} +export interface MutationUpdateChatProfileArgs { + email?: InputMaybe; + firstname?: InputMaybe; + lastname?: InputMaybe; + profileId: Scalars['String']; +} +export interface MutationUpdateCustomerArgs { + input: CustomerInput; +} +export interface MutationUpdateCustomerAddressArgs { + id: Scalars['Int']; + input?: InputMaybe; +} +export interface MutationUpdateCustomerEmailArgs { + email: Scalars['String']; + password: Scalars['String']; +} +export interface MutationUpdateCustomerV2Args { + input: CustomerUpdateInput; +} +export interface MutationUpdateProductsInWishlistArgs { + wishlistId: Scalars['ID']; + wishlistItems: Array; +} +export interface MutationUpdateQuoteEmailArgs { + cartId: Scalars['String']; + email: Scalars['String']; +} +/** Contains details about the requested order */ +export interface Order { + /** An array containing the items purchased in this order */ + items?: Maybe>>; + /** @deprecated The order_id field is deprecated, use order_number instead. */ + order_id?: Maybe; + /** The unique ID for a `Order` object. */ + order_number: Scalars['String']; + /** Contains the calculated total for this order */ + total?: Maybe; +} +/** OrderAddress contains detailed information about an order's billing and shipping addresses */ +export interface OrderAddress { + /** The city or town */ + city: Scalars['String']; + /** The customer's company */ + company?: Maybe; + /** The customer's country */ + country_code?: Maybe; + /** The fax number */ + fax?: Maybe; + /** The first name of the person associated with the shipping/billing address */ + firstname: Scalars['String']; + /** The family name of the person associated with the shipping/billing address */ + lastname: Scalars['String']; + /** The middle name of the person associated with the shipping/billing address */ + middlename?: Maybe; + /** The customer's order ZIP or postal code */ + postcode?: Maybe; + /** An honorific, such as Dr., Mr., or Mrs. */ + prefix?: Maybe; + /** The state or province name */ + region?: Maybe; + /** The unique ID for a `Region` object of a pre-defined region */ + region_id?: Maybe; + /** An array of strings that define the street number and name */ + street: Array>; + /** A value such as Sr., Jr., or III */ + suffix?: Maybe; + /** The telephone number */ + telephone: Scalars['String']; + /** The customer's Value-added tax (VAT) number (for corporate customers) */ + vat_id?: Maybe; +} +export interface OrderItem extends OrderItemInterface { + /** The final discount information for the product */ + discounts?: Maybe>>; + /** The entered option for the base product, such as a logo or image */ + entered_options?: Maybe>>; + /** The unique ID for a `OrderItemInterface` object */ + id: Scalars['ID']; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price of the base product, including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The type of product, such as simple, configurable, etc. */ + product_type?: Maybe; + /** URL key of the base product */ + product_url_key?: Maybe; + /** The number of canceled items */ + quantity_canceled?: Maybe; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; + /** The number of units ordered for this item */ + quantity_ordered?: Maybe; + /** The number of refunded items */ + quantity_refunded?: Maybe; + /** The number of returned items */ + quantity_returned?: Maybe; + /** The number of shipped items */ + quantity_shipped?: Maybe; + /** The selected options for the base product, such as color or size */ + selected_options?: Maybe>>; + /** The status of the order item */ + status?: Maybe; +} +/** Order item details */ +export interface OrderItemInterface { + /** The final discount information for the product */ + discounts?: Maybe>>; + /** The entered option for the base product, such as a logo or image */ + entered_options?: Maybe>>; + /** The unique ID for a `OrderItemInterface` object */ + id: Scalars['ID']; + /** The name of the base product */ + product_name?: Maybe; + /** The sale price of the base product, including selected options */ + product_sale_price: Money; + /** The SKU of the base product */ + product_sku: Scalars['String']; + /** The type of product, such as simple, configurable, etc. */ + product_type?: Maybe; + /** URL key of the base product */ + product_url_key?: Maybe; + /** The number of canceled items */ + quantity_canceled?: Maybe; + /** The number of invoiced items */ + quantity_invoiced?: Maybe; + /** The number of units ordered for this item */ + quantity_ordered?: Maybe; + /** The number of refunded items */ + quantity_refunded?: Maybe; + /** The number of returned items */ + quantity_returned?: Maybe; + /** The number of shipped items */ + quantity_shipped?: Maybe; + /** The selected options for the base product, such as color or size */ + selected_options?: Maybe>>; + /** The status of the order item */ + status?: Maybe; +} +/** Represents order item options like selected or entered */ +export interface OrderItemOption { + /** The name of the option */ + label: Scalars['String']; + /** The value of the option */ + value: Scalars['String']; +} +/** Contains details about the payment method used to pay for the order */ +export interface OrderPaymentMethod { + /** Additional data per payment method type */ + additional_data?: Maybe>>; + /** The label that describes the payment method */ + name: Scalars['String']; + /** The payment method code that indicates how the order was paid for */ + type: Scalars['String']; +} +/** Order shipment details */ +export interface OrderShipment { + /** Comments added to the shipment */ + comments?: Maybe>>; + /** The unique ID for a `OrderShipment` object */ + id: Scalars['ID']; + /** Contains items included in the shipment */ + items?: Maybe>>; + /** The sequential credit shipment number */ + number: Scalars['String']; + /** Contains shipment tracking details */ + tracking?: Maybe>>; +} +/** Contains details about the sales total amounts used to calculate the final price */ +export interface OrderTotal { + /** The final base grand total amount in the base currency */ + base_grand_total: Money; + /** The applied discounts to the order */ + discounts?: Maybe>>; + /** The final total amount, including shipping, discounts, and taxes */ + grand_total: Money; + /** Contains details about the shipping and handling costs for the order */ + shipping_handling?: Maybe; + /** The subtotal of the order, excluding shipping, discounts, and taxes */ + subtotal: Money; + /** The order tax details */ + taxes?: Maybe>>; + /** The shipping amount for the order */ + total_shipping: Money; + /** The amount of tax applied to the order */ + total_tax: Money; +} +/** Required input for Payflow Express Checkout payments */ +export interface PayflowExpressInput { + /** The unique ID of the PayPal user */ + payer_id: Scalars['String']; + /** The token returned by the createPaypalExpressToken mutation */ + token: Scalars['String']; +} +/** A set of relative URLs that PayPal will use in response to various actions during the authorization process. Magento prepends the base URL to this value to create a full URL. For example, if the full URL is https://www.example.com/path/to/page.html, the relative URL is path/to/page.html. Use this input for Payflow Link and Payments Advanced payment methods. */ +export interface PayflowLinkInput { + /** The relative URL of the page that PayPal will redirect to when the buyer cancels the transaction in order to choose a different payment method. If the full URL to this page is https://www.example.com/paypal/action/cancel.html, the relative URL is paypal/action/cancel.html. */ + cancel_url: Scalars['String']; + /** The relative URL of the transaction error page that PayPal will redirect to upon payment error. If the full URL to this page is https://www.example.com/paypal/action/error.html, the relative URL is paypal/action/error.html. */ + error_url: Scalars['String']; + /** The relative URL of the order confirmation page that PayPal will redirect to when the payment is successful and additional confirmation is not needed. If the full URL to this page is https://www.example.com/paypal/action/return.html, the relative URL is paypal/action/return.html. */ + return_url: Scalars['String']; +} +/** Mode for payment: TEST or LIVE. Applies to Payflow Link and Payments Advanced payment methods. */ +export declare enum PayflowLinkMode { + Live = 'LIVE', + Test = 'TEST', +} +/** Contains information used to generate PayPal iframe for transaction. Applies to Payflow Link and Payments Advanced payment methods. */ +export interface PayflowLinkToken { + /** Mode for Payflow transaction */ + mode?: Maybe; + /** PayPal URL used for requesting Payflow form */ + paypal_url?: Maybe; + /** Secure token generated by PayPal */ + secure_token?: Maybe; + /** Secure token ID generated by PayPal */ + secure_token_id?: Maybe; +} +/** Input required to fetch payment token information for Payflow Link and Payments Advanced payment methods. */ +export interface PayflowLinkTokenInput { + /** The unique ID that identifies the customer's cart */ + cart_id: Scalars['String']; +} +/** Required input for Payflow Pro and Payments Pro payment methods. */ +export interface PayflowProInput { + /** Required input for credit card related information */ + cc_details: CreditCardDetailsInput; + /** States whether details about the customer's credit/debit card should be tokenized for later usage. Required only if Vault is enabled for PayPal Payflow Pro payment integration. */ + is_active_payment_token_enabler?: InputMaybe; +} +/** Input required to complete payment. Applies to Payflow Pro and Payments Pro payment methods. */ +export interface PayflowProResponseInput { + cart_id: Scalars['String']; + paypal_payload: Scalars['String']; +} +export interface PayflowProResponseOutput { + cart: Cart; +} +/** Contains the secure information used to authorize transaction. Applies to Payflow Pro and Payments Pro payment methods. */ +export interface PayflowProToken { + response_message: Scalars['String']; + result: Scalars['Int']; + result_code: Scalars['Int']; + secure_token: Scalars['String']; + secure_token_id: Scalars['String']; +} +/** Input required to fetch payment token information for Payflow Pro and Payments Pro payment methods. */ +export interface PayflowProTokenInput { + /** The unique ID that identifies the customer's cart */ + cart_id: Scalars['String']; + /** A set of relative URLs that PayPal uses for callback. */ + urls: PayflowProUrlInput; +} +/** A set of relative URLs that PayPal will use in response to various actions during the authorization process. Magento prepends the base URL to this value to create a full URL. For example, if the full URL is https://www.example.com/path/to/page.html, the relative URL is path/to/page.html. Use this input for Payflow Pro and Payment Pro payment methods. */ +export interface PayflowProUrlInput { + /** The relative URL of the page that PayPal will redirect to when the buyer cancels the transaction in order to choose a different payment method. If the full URL to this page is https://www.example.com/paypal/action/cancel.html, the relative URL is paypal/action/cancel.html. */ + cancel_url: Scalars['String']; + /** The relative URL of the transaction error page that PayPal will redirect to upon payment error. If the full URL to this page is https://www.example.com/paypal/action/error.html, the relative URL is paypal/action/error.html. */ + error_url: Scalars['String']; + /** The relative URL of the final confirmation page that PayPal will redirect to upon payment success. If the full URL to this page is https://www.example.com/paypal/action/return.html, the relative URL is paypal/action/return.html. */ + return_url: Scalars['String']; +} +export interface PaymentMethodInput { + braintree?: InputMaybe; + braintree_cc_vault?: InputMaybe; + /** Payment method code */ + code: Scalars['String']; + /** Required input for PayPal Hosted pro payments */ + hosted_pro?: InputMaybe; + klarna?: InputMaybe; + /** Required input for Payflow Express Checkout payments */ + payflow_express?: InputMaybe; + /** Required input for PayPal Payflow Link and Payments Advanced payments */ + payflow_link?: InputMaybe; + /** Required input type for PayPal Payflow Pro and Payment Pro payments */ + payflowpro?: InputMaybe; + /** Required input type for PayPal Payflow Pro vault payments */ + payflowpro_cc_vault?: InputMaybe; + /** Required input for Express Checkout and Payments Standard payments */ + paypal_express?: InputMaybe; + /** Purchase order number */ + purchase_order_number?: InputMaybe; +} +/** The stored payment method available to the customer */ +export interface PaymentToken { + /** Stored account details */ + details?: Maybe; + /** The payment method code associated with the token */ + payment_method_code: Scalars['String']; + /** The public hash of the token */ + public_hash: Scalars['String']; + type: PaymentTokenTypeEnum; +} +/** The list of available payment token types */ +export declare enum PaymentTokenTypeEnum { + Account = 'account', + Card = 'card', +} +/** Required input for Express Checkout and Payments Standard payments */ +export interface PaypalExpressInput { + /** The unique ID of the PayPal user */ + payer_id: Scalars['String']; + /** The token returned by the createPaypalExpressToken mutation */ + token: Scalars['String']; +} +/** Deprecated: use type `PaypalExpressTokenOutput` instead */ +export interface PaypalExpressToken { + /** + * A set of URLs that allow the buyer to authorize payment and adjust checkout details + * @deprecated Use field `paypal_urls` of type `PaypalExpressTokenOutput` instead + */ + paypal_urls?: Maybe; + /** + * The token returned by PayPal + * @deprecated Use field `token` of type `PaypalExpressTokenOutput` instead + */ + token?: Maybe; +} +/** Defines the attributes required to receive a payment token for Express Checkout and Payments Standard payment methods. */ +export interface PaypalExpressTokenInput { + /** The unique ID that identifies the customer's cart */ + cart_id: Scalars['String']; + /** Payment method code */ + code: Scalars['String']; + /** Indicates whether the buyer selected the quick checkout button. The default value is false */ + express_button?: InputMaybe; + /** A set of relative URLs that PayPal uses in response to various actions during the authorization process */ + urls: PaypalExpressUrlsInput; + /** Indicates whether the buyer clicked the PayPal credit button. The default value is false */ + use_paypal_credit?: InputMaybe; +} +/** Contains the token returned by PayPal and a set of URLs that allow the buyer to authorize payment and adjust checkout details. Applies to Express Checkout and Payments Standard payment methods. */ +export interface PaypalExpressTokenOutput { + /** A set of URLs that allow the buyer to authorize payment and adjust checkout details */ + paypal_urls?: Maybe; + /** The token returned by PayPal */ + token?: Maybe; +} +/** A set of URLs that allow the buyer to authorize payment and adjust checkout details for Express Checkout and Payments Standard transactions. */ +export interface PaypalExpressUrlList { + /** The PayPal URL that allows the buyer to edit their checkout details */ + edit?: Maybe; + /** The URL to the PayPal login page */ + start?: Maybe; +} +/** A set of relative URLs that PayPal will use in response to various actions during the authorization process. Magento prepends the base URL to this value to create a full URL. For example, if the full URL is https://www.example.com/path/to/page.html, the relative URL is path/to/page.html. Use this input for Express Checkout and Payments Standard payment methods. */ +export interface PaypalExpressUrlsInput { + /** The relative URL of the page that PayPal will redirect to when the buyer cancels the transaction in order to choose a different payment method. If the full URL to this page is https://www.example.com/paypal/action/cancel.html, the relative URL is paypal/action/cancel.html. */ + cancel_url: Scalars['String']; + /** The relative URL of the page that PayPal will redirect to when the payment has been put on hold for additional review. This condition mostly applies to ACH transactions, and is not applicable to most PayPal solutions. If the full URL to this page is https://www.example.com/paypal/action/success_pending.html, the relative URL is paypal/action/success_pending.html. */ + pending_url?: InputMaybe; + /** The relative URL of the final confirmation page that PayPal will redirect to upon payment success. If the full URL to this page is https://www.example.com/paypal/action/return.html, the relative URL is paypal/action/return.html. */ + return_url: Scalars['String']; + /** The relative URL of the order confirmation page that PayPal will redirect to when the payment is successful and additional confirmation is not needed. Not applicable to most PayPal solutions. If the full URL to this page is https://www.example.com/paypal/action/success.html, the relative URL is paypal/action/success.html. */ + success_url?: InputMaybe; +} +/** PhysicalProductInterface contains attributes specific to tangible products. */ +export interface PhysicalProductInterface { + /** The weight of the item, in units defined by the store. */ + weight?: Maybe; +} +/** Defines Pickup Location information. */ +export interface PickupLocation { + city?: Maybe; + contact_name?: Maybe; + country_id?: Maybe; + description?: Maybe; + email?: Maybe; + fax?: Maybe; + latitude?: Maybe; + longitude?: Maybe; + name?: Maybe; + phone?: Maybe; + pickup_location_code?: Maybe; + postcode?: Maybe; + region?: Maybe; + region_id?: Maybe; + street?: Maybe; +} +/** PickupLocationFilterInput defines the list of attributes and filters for the search. */ +export interface PickupLocationFilterInput { + /** Filter by city. */ + city?: InputMaybe; + /** Filter by country. */ + country_id?: InputMaybe; + /** Filter by pickup location name. */ + name?: InputMaybe; + /** Filter by pickup location code. */ + pickup_location_code?: InputMaybe; + /** Filter by postcode. */ + postcode?: InputMaybe; + /** Filter by region. */ + region?: InputMaybe; + /** Filter by region id. */ + region_id?: InputMaybe; + /** Filter by street. */ + street?: InputMaybe; +} +/** PickupLocationSortInput specifies attribute to use for sorting search results and indicates whether the results are sorted in ascending or descending order. */ +export interface PickupLocationSortInput { + /** City where pickup location is placed. */ + city?: InputMaybe; + /** Name of the contact person. */ + contact_name?: InputMaybe; + /** Id of the country in two letters. */ + country_id?: InputMaybe; + /** Description of the pickup location. */ + description?: InputMaybe; + /** Distance to the address, requested by distance filter. Applicable only with distance filter. If distance sort order is present, all other sort orders will be ignored. */ + distance?: InputMaybe; + /** Contact email of the pickup location. */ + email?: InputMaybe; + /** Contact fax of the pickup location. */ + fax?: InputMaybe; + /** Geographic latitude where pickup location is placed. */ + latitude?: InputMaybe; + /** Geographic longitude where pickup location is placed. */ + longitude?: InputMaybe; + /** The pickup location name. Customer use this to identify the pickup location. */ + name?: InputMaybe; + /** Contact phone number of the pickup location. */ + phone?: InputMaybe; + /** A code assigned to pickup location to identify the source. */ + pickup_location_code?: InputMaybe; + /** Postcode where pickup location is placed. */ + postcode?: InputMaybe; + /** Name of the region. */ + region?: InputMaybe; + /** Id of the region. */ + region_id?: InputMaybe; + /** Street where pickup location is placed. */ + street?: InputMaybe; +} +/** Top level object returned in a pickup locations search. */ +export interface PickupLocations { + /** An array of pickup locations that match the specific search request. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** The number of products returned. */ + total_count?: Maybe; +} +export interface PlaceOrderInput { + cart_id: Scalars['String']; +} +export interface PlaceOrderOutput { + order: Order; +} +/** Price is deprecated, replaced by ProductPrice. The Price object defines the price of a product as well as any tax-related adjustments. */ +export interface Price { + /** + * An array that provides information about tax, weee, or weee_tax adjustments. + * @deprecated Price is deprecated, use ProductPrice. + */ + adjustments?: Maybe>>; + /** + * The price of a product plus a three-letter currency code. + * @deprecated Price is deprecated, use ProductPrice. + */ + amount?: Maybe; +} +/** PriceAdjustment is deprecated. Taxes will be included or excluded in the price. The PricedAdjustment object defines the amount of money to apply as an adjustment, the type of adjustment to apply, and whether the item is included or excluded from the adjustment. */ +export interface PriceAdjustment { + /** The amount of the price adjustment and its currency code. */ + amount?: Maybe; + /** + * Indicates whether the adjustment involves tax, weee, or weee_tax. + * @deprecated PriceAdjustment is deprecated. + */ + code?: Maybe; + /** + * Indicates whether the entity described by the code attribute is included or excluded from the adjustment. + * @deprecated PriceAdjustment is deprecated. + */ + description?: Maybe; +} +/** PriceAdjustment.code is deprecated. This enumeration contains values defined in modules other than the Catalog module. */ +export declare enum PriceAdjustmentCodesEnum { + Tax = 'TAX', + Weee = 'WEEE', + WeeeTax = 'WEEE_TAX', +} +/** PriceAdjustmentDescriptionEnum is deprecated. This enumeration states whether a price adjustment is included or excluded. */ +export declare enum PriceAdjustmentDescriptionEnum { + Excluded = 'EXCLUDED', + Included = 'INCLUDED', +} +/** Price range for a product. If the product has a single price, the minimum and maximum price will be the same. */ +export interface PriceRange { + /** The highest possible price for the product. */ + maximum_price?: Maybe; + /** The lowest possible price for the product. */ + minimum_price: ProductPrice; +} +/** This enumeration the price type. */ +export declare enum PriceTypeEnum { + Dynamic = 'DYNAMIC', + Fixed = 'FIXED', + Percent = 'PERCENT', +} +/** This enumeration defines whether a bundle product's price is displayed as the lowest possible value or as a range. */ +export declare enum PriceViewEnum { + AsLowAs = 'AS_LOW_AS', + PriceRange = 'PRICE_RANGE', +} +export interface ProductAttribute { + /** The unique identifier for a product attribute code. */ + code: Scalars['String']; + /** The display value of the attribute */ + value: Scalars['String']; +} +/** ProductAttributeFilterInput defines the filters to be used in the search. A filter contains at least one attribute, a comparison operator, and the value that is being searched for. */ +export interface ProductAttributeFilterInput { + /** Attribute label: Activity */ + activity?: InputMaybe; + /** Attribute label: Category Gear */ + category_gear?: InputMaybe; + /** Deprecated: use `category_uid` to filter product by category id. */ + category_id?: InputMaybe; + /** Filter product by the unique ID for a `CategoryInterface` object. */ + category_uid?: InputMaybe; + /** Attribute label: Climate */ + climate?: InputMaybe; + /** Attribute label: Collar */ + collar?: InputMaybe; + /** Attribute label: Color */ + color?: InputMaybe; + /** Attribute label: Description */ + description?: InputMaybe; + /** Attribute label: Eco Collection */ + eco_collection?: InputMaybe; + /** Attribute label: Erin Recommends */ + erin_recommends?: InputMaybe; + /** Attribute label: Features */ + features_bags?: InputMaybe; + /** Attribute label: Format */ + format?: InputMaybe; + /** Attribute label: Gender */ + gender?: InputMaybe; + /** Attribute label: Material */ + material?: InputMaybe; + /** Attribute label: Product Name */ + name?: InputMaybe; + /** Attribute label: New */ + new?: InputMaybe; + /** Attribute label: Pattern */ + pattern?: InputMaybe; + /** Attribute label: Performance Fabric */ + performance_fabric?: InputMaybe; + /** Attribute label: Price */ + price?: InputMaybe; + /** Attribute label: Sale */ + sale?: InputMaybe; + /** Attribute label: Short Description */ + short_description?: InputMaybe; + /** Attribute label: Size */ + size?: InputMaybe; + /** Attribute label: SKU */ + sku?: InputMaybe; + /** Attribute label: Sleeve */ + sleeve?: InputMaybe; + /** Attribute label: Strap/Handle */ + strap_bags?: InputMaybe; + /** Attribute label: Style Bags */ + style_bags?: InputMaybe; + /** Attribute label: Style Bottom */ + style_bottom?: InputMaybe; + /** Attribute label: Style General */ + style_general?: InputMaybe; + /** The part of the URL that identifies the product */ + url_key?: InputMaybe; +} +/** ProductAttributeSortInput specifies the attribute to use for sorting search results and indicates whether the results are sorted in ascending or descending order. It's possible to sort products using searchable attributes with enabled 'Use in Filter Options' option */ +export interface ProductAttributeSortInput { + /** Attribute label: Product Name */ + name?: InputMaybe; + /** Sort by the position assigned to each product. */ + position?: InputMaybe; + /** Attribute label: Price */ + price?: InputMaybe; + /** Sort by the search relevance score (default). */ + relevance?: InputMaybe; +} +/** A discount applied to a product price. */ +export interface ProductDiscount { + /** The actual value of the discount. */ + amount_off?: Maybe; + /** The discount expressed a percentage. */ + percent_off?: Maybe; +} +/** ProductFilterInput is deprecated, use @ProductAttributeFilterInput instead. ProductFilterInput defines the filters to be used in the search. A filter contains at least one attribute, a comparison operator, and the value that is being searched for. */ +export interface ProductFilterInput { + /** Category ID the product belongs to. */ + category_id?: InputMaybe; + /** The product's country of origin. */ + country_of_manufacture?: InputMaybe; + /** Timestamp indicating when the product was created. */ + created_at?: InputMaybe; + /** The name of a custom layout. */ + custom_layout?: InputMaybe; + /** XML code that is applied as a layout update to the product page. */ + custom_layout_update?: InputMaybe; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: InputMaybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: InputMaybe; + /** Indicates whether additional attributes have been created for the product. */ + has_options?: InputMaybe; + /** The relative path to the main image on the product page. */ + image?: InputMaybe; + /** The label assigned to a product image. */ + image_label?: InputMaybe; + /** A number representing the product's manufacturer. */ + manufacturer?: InputMaybe; + /** The numeric maximal price of the product. Do not include the currency code. */ + max_price?: InputMaybe; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: InputMaybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: InputMaybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: InputMaybe; + /** The numeric minimal price of the product. Do not include the currency code. */ + min_price?: InputMaybe; + /** The product name. Customers use this name to identify the product. */ + name?: InputMaybe; + /** The beginning date for new product listings, and determines if the product is featured as a new product. */ + news_from_date?: InputMaybe; + /** The end date for new product listings. */ + news_to_date?: InputMaybe; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: InputMaybe; + /** The keyword required to perform a logical OR comparison. */ + or?: InputMaybe; + /** The price of an item. */ + price?: InputMaybe; + /** Indicates whether the product has required options. */ + required_options?: InputMaybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: InputMaybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: InputMaybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: InputMaybe; + /** The label assigned to a product's small image. */ + small_image_label?: InputMaybe; + /** The beginning date that a product has a special price. */ + special_from_date?: InputMaybe; + /** The discounted price of the product. Do not include the currency code. */ + special_price?: InputMaybe; + /** The end date that a product has a special price. */ + special_to_date?: InputMaybe; + /** The file name of a swatch image */ + swatch_image?: InputMaybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: InputMaybe; + /** The label assigned to a product's thumbnail image. */ + thumbnail_label?: InputMaybe; + /** The price when tier pricing is in effect and the items purchased threshold has been reached. */ + tier_price?: InputMaybe; + /** Timestamp indicating when the product was updated. */ + updated_at?: InputMaybe; + /** The part of the URL that identifies the product */ + url_key?: InputMaybe; + url_path?: InputMaybe; + /** The weight of the item, in units defined by the store. */ + weight?: InputMaybe; +} +/** Product image information. Contains the image URL and label. */ +export interface ProductImage extends MediaGalleryInterface { + /** Whether the image is hidden from view. */ + disabled?: Maybe; + /** The label of the product image or video. */ + label?: Maybe; + /** The media item's position after it has been sorted. */ + position?: Maybe; + /** The URL of the product image or video. */ + url?: Maybe; +} +/** Product Information used for Pickup Locations search. */ +export interface ProductInfoInput { + /** Product SKU. */ + sku: Scalars['String']; +} +/** The ProductInterface contains attributes that are common to all types of products. Note that descriptions may not be available for custom and EAV attributes. */ +export interface ProductInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Related Products */ + related_products?: Maybe>>; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; +} +/** The ProductInterface contains attributes that are common to all types of products. Note that descriptions may not be available for custom and EAV attributes. */ +export interface ProductInterfaceReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +/** ProductLinks is an implementation of ProductLinksInterface. */ +export interface ProductLinks extends ProductLinksInterface { + /** One of related, associated, upsell, or crosssell. */ + link_type?: Maybe; + /** The SKU of the linked product. */ + linked_product_sku?: Maybe; + /** The type of linked product (simple, virtual, bundle, downloadable, grouped, configurable). */ + linked_product_type?: Maybe; + /** The position within the list of product links. */ + position?: Maybe; + /** The identifier of the linked product. */ + sku?: Maybe; +} +/** ProductLinks contains information about linked products, including the link type and product type of each item. */ +export interface ProductLinksInterface { + /** One of related, associated, upsell, or crosssell. */ + link_type?: Maybe; + /** The SKU of the linked product. */ + linked_product_sku?: Maybe; + /** The type of linked product (simple, virtual, bundle, downloadable, grouped, configurable). */ + linked_product_type?: Maybe; + /** The position within the list of product links. */ + position?: Maybe; + /** The identifier of the linked product. */ + sku?: Maybe; +} +/** ProductMediaGalleryEntriesContent contains an image in base64 format and basic information about the image. */ +export interface ProductMediaGalleryEntriesContent { + /** The image in base64 format. */ + base64_encoded_data?: Maybe; + /** The file name of the image. */ + name?: Maybe; + /** The MIME type of the file, such as image/png. */ + type?: Maybe; +} +/** ProductMediaGalleryEntriesVideoContent contains a link to a video file and basic information about the video. */ +export interface ProductMediaGalleryEntriesVideoContent { + /** Must be external-video. */ + media_type?: Maybe; + /** A description of the video. */ + video_description?: Maybe; + /** Optional data about the video. */ + video_metadata?: Maybe; + /** Describes the video source. */ + video_provider?: Maybe; + /** The title of the video. */ + video_title?: Maybe; + /** The URL to the video. */ + video_url?: Maybe; +} +/** Represents a product price. */ +export interface ProductPrice { + /** The price discount. Represents the difference between the regular and final price. */ + discount?: Maybe; + /** The final price of the product after discounts applied. */ + final_price: Money; + /** The multiple FPTs that can be applied to a product price. */ + fixed_product_taxes?: Maybe>>; + /** The regular price of the product. */ + regular_price: Money; +} +/** ProductPrices is deprecated, replaced by PriceRange. The ProductPrices object contains the regular price of an item, as well as its minimum and maximum prices. Only composite products, which include bundle, configurable, and grouped products, can contain a minimum and maximum price. */ +export interface ProductPrices { + /** + * The highest possible final price for all the options defined within a composite product. If you are specifying a price range, this would be the to value. + * @deprecated Use PriceRange.maximum_price. + */ + maximalPrice?: Maybe; + /** + * The lowest possible final price for all the options defined within a composite product. If you are specifying a price range, this would be the from value. + * @deprecated Use PriceRange.minimum_price. + */ + minimalPrice?: Maybe; + /** + * The base price of a product. + * @deprecated Use regular_price from PriceRange.minimum_price or PriceRange.maximum_price. + */ + regularPrice?: Maybe; +} +/** Details of a product review */ +export interface ProductReview { + /** The average rating for product review. */ + average_rating: Scalars['Float']; + /** Date indicating when the review was created. */ + created_at: Scalars['String']; + /** The customer's nickname. Defaults to the customer name, if logged in */ + nickname: Scalars['String']; + /** Contains details about the reviewed product */ + product: ProductInterface; + /** An array of ratings by rating category, such as quality, price, and value */ + ratings_breakdown: Array>; + /** The summary (title) of the review */ + summary: Scalars['String']; + /** The review text. */ + text: Scalars['String']; +} +export interface ProductReviewRating { + /** The label assigned to an aspect of a product that is being rated, such as quality or price */ + name: Scalars['String']; + /** The rating value given by customer. By default, possible values range from 1 to 5. */ + value: Scalars['String']; +} +export interface ProductReviewRatingInput { + /** An encoded rating ID. */ + id: Scalars['String']; + /** An encoded rating value id. */ + value_id: Scalars['String']; +} +export interface ProductReviewRatingMetadata { + /** An encoded rating ID. */ + id: Scalars['String']; + /** The label assigned to an aspect of a product that is being rated, such as quality or price */ + name: Scalars['String']; + /** List of product review ratings sorted by position. */ + values: Array>; +} +export interface ProductReviewRatingValueMetadata { + /** A ratings scale, such as the number of stars awarded */ + value: Scalars['String']; + /** An encoded rating value id. */ + value_id: Scalars['String']; +} +export interface ProductReviewRatingsMetadata { + /** List of product reviews sorted by position */ + items: Array>; +} +export interface ProductReviews { + /** An array of product reviews. */ + items: Array>; + /** Metadata for pagination rendering. */ + page_info: SearchResultPageInfo; +} +/** ProductSortInput is deprecated, use @ProductAttributeSortInput instead. ProductSortInput specifies the attribute to use for sorting search results and indicates whether the results are sorted in ascending or descending order. */ +export interface ProductSortInput { + /** The product's country of origin. */ + country_of_manufacture?: InputMaybe; + /** Timestamp indicating when the product was created. */ + created_at?: InputMaybe; + /** The name of a custom layout. */ + custom_layout?: InputMaybe; + /** XML code that is applied as a layout update to the product page. */ + custom_layout_update?: InputMaybe; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: InputMaybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: InputMaybe; + /** Indicates whether additional attributes have been created for the product. */ + has_options?: InputMaybe; + /** The relative path to the main image on the product page. */ + image?: InputMaybe; + /** The label assigned to a product image. */ + image_label?: InputMaybe; + /** A number representing the product's manufacturer. */ + manufacturer?: InputMaybe; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: InputMaybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: InputMaybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: InputMaybe; + /** The product name. Customers use this name to identify the product. */ + name?: InputMaybe; + /** The beginning date for new product listings, and determines if the product is featured as a new product. */ + news_from_date?: InputMaybe; + /** The end date for new product listings. */ + news_to_date?: InputMaybe; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: InputMaybe; + /** The price of the item. */ + price?: InputMaybe; + /** Indicates whether the product has required options. */ + required_options?: InputMaybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: InputMaybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: InputMaybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: InputMaybe; + /** The label assigned to a product's small image. */ + small_image_label?: InputMaybe; + /** The beginning date that a product has a special price. */ + special_from_date?: InputMaybe; + /** The discounted price of the product. */ + special_price?: InputMaybe; + /** The end date that a product has a special price. */ + special_to_date?: InputMaybe; + /** The file name of a swatch image */ + swatch_image?: InputMaybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: InputMaybe; + /** The label assigned to a product's thumbnail image. */ + thumbnail_label?: InputMaybe; + /** The price when tier pricing is in effect and the items purchased threshold has been reached. */ + tier_price?: InputMaybe; + /** Timestamp indicating when the product was updated. */ + updated_at?: InputMaybe; + /** The part of the URL that identifies the product */ + url_key?: InputMaybe; + url_path?: InputMaybe; + /** The weight of the item, in units defined by the store. */ + weight?: InputMaybe; +} +/** This enumeration states whether a product stock status is in stock or out of stock */ +export enum ProductStockStatus { + InStock = 'IN_STOCK', + OutOfStock = 'OUT_OF_STOCK', +} +/** ProductTierPrices is deprecated and has been replaced by TierPrice. The ProductTierPrices object defines a tier price, which is a quantity discount offered to a specific customer group. */ +export interface ProductTierPrices { + /** + * The ID of the customer group. + * @deprecated customer_group_id is not relevant for storefront. + */ + customer_group_id?: Maybe; + /** + * The percentage discount of the item. + * @deprecated ProductTierPrices is deprecated. Use TierPrice.discount. + */ + percentage_value?: Maybe; + /** + * The number of items that must be purchased to qualify for tier pricing. + * @deprecated ProductTierPrices is deprecated, use TierPrice.quantity. + */ + qty?: Maybe; + /** + * The price of the fixed price item. + * @deprecated ProductTierPrices is deprecated. Use TierPrice.final_price + */ + value?: Maybe; + /** + * The ID assigned to the website. + * @deprecated website_id is not relevant for storefront. + */ + website_id?: Maybe; +} +/** Contains information about a product video. */ +export interface ProductVideo extends MediaGalleryInterface { + /** Whether the image is hidden from view. */ + disabled?: Maybe; + /** The label of the product image or video. */ + label?: Maybe; + /** The media item's position after it has been sorted. */ + position?: Maybe; + /** The URL of the product image or video. */ + url?: Maybe; + /** Contains a ProductMediaGalleryEntriesVideoContent object. */ + video_content?: Maybe; +} +/** The Products object is the top-level object returned in a product search. */ +export interface Products { + /** Layered navigation aggregations. */ + aggregations?: Maybe>>; + /** + * Layered navigation filters array. + * @deprecated Use aggregations instead + */ + filters?: Maybe>>; + /** An array of products that match the specified search criteria. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** An object that includes the default sort field and all available sort fields. */ + sort_fields?: Maybe; + /** The number of products that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + total_count?: Maybe; +} +export interface Query { + /** Get a list of available store views and their config information. */ + availableStores?: Maybe>>; + /** Returns information about shopping cart */ + cart?: Maybe; + categories?: Maybe; + /** + * The category query searches for categories that match the criteria specified in the search and filter attributes. + * @deprecated Use 'categoryList' query instead of 'category' query + */ + category?: Maybe; + /** Returns an array of categories based on the specified filters. */ + categoryList?: Maybe>>; + /** Retrieves an array of configuration data for the chat widget. */ + chatData?: Maybe; + /** The Checkout Agreements information */ + checkoutAgreements?: Maybe>>; + /** The CMS block query returns information about CMS blocks */ + cmsBlocks?: Maybe; + /** The CMS page query returns information about a CMS page */ + cmsPage?: Maybe; + /** Return products that have been added to the specified compare list */ + compareList?: Maybe; + /** The countries query provides information for all countries. */ + countries?: Maybe>>; + /** The countries query provides information for a single country. */ + country?: Maybe; + /** The currency query returns information about store currency. */ + currency?: Maybe; + /** The customAttributeMetadata query returns the attribute type, given an attribute code and entity type */ + customAttributeMetadata?: Maybe; + /** The customer query returns information about a customer account */ + customer?: Maybe; + /** Returns information about the customer shopping cart */ + customerCart: Cart; + /** The query returns the contents of a customer's downloadable products */ + customerDownloadableProducts?: Maybe; + /** @deprecated Use orders from customer instead */ + customerOrders?: Maybe; + /** Return a list of customer payment tokens */ + customerPaymentTokens?: Maybe; + /** Returns status of Easy Email Capture for Checkout. */ + emailCaptureCheckout?: Maybe; + /** Returns status of Easy Email Capture for Newsletter. */ + emailCaptureNewsletter?: Maybe; + /** Retrieve secure PayPal url for Payments Pro Hosted Solution transaction. */ + getHostedProUrl?: Maybe; + /** Retrieve payment credentials for transaction. Use this query for Payflow Link and Payments Advanced payment methods. */ + getPayflowLinkToken?: Maybe; + isEmailAvailable?: Maybe; + /** Retrieves information about an order by order id. */ + orderData?: Maybe; + /** The pickup locations query searches for locations that match the search request requirements. */ + pickupLocations?: Maybe; + /** Retrieves metadata required by clients to render the Reviews section. */ + productReviewRatingsMetadata: ProductReviewRatingsMetadata; + /** The products query searches for products that match the criteria specified in the search and filter attributes. */ + products?: Maybe; + /** Return the full details for a specified product, category, or CMS page given the specified url_key, appended by the url_suffix, if one exists */ + route?: Maybe; + /** The store config query */ + storeConfig?: Maybe; + /** Retrieves an array of configuration data for different types of tracking. */ + trackingData?: Maybe; + /** + * The urlResolver query returns the relative URL for a specified product, category or CMS page, using as input a url_key appended by the url_suffix, if one exists + * @deprecated Use the 'route' query instead + */ + urlResolver?: Maybe; + /** + * The wishlist query returns the contents of a customer's wish list + * @deprecated Moved under `Customer` `wishlist` + */ + wishlist?: Maybe; +} +export interface QueryAvailableStoresArgs { + useCurrentGroup?: InputMaybe; +} +export interface QueryCartArgs { + cart_id: Scalars['String']; +} +export interface QueryCategoriesArgs { + currentPage?: InputMaybe; + filters?: InputMaybe; + pageSize?: InputMaybe; +} +export interface QueryCategoryArgs { + id?: InputMaybe; +} +export interface QueryCategoryListArgs { + filters?: InputMaybe; +} +export interface QueryCmsBlocksArgs { + identifiers?: InputMaybe>>; +} +export interface QueryCmsPageArgs { + id?: InputMaybe; + identifier?: InputMaybe; +} +export interface QueryCompareListArgs { + uid: Scalars['ID']; +} +export interface QueryCountryArgs { + id?: InputMaybe; +} +export interface QueryCustomAttributeMetadataArgs { + attributes: Array; +} +export interface QueryGetHostedProUrlArgs { + input: HostedProUrlInput; +} +export interface QueryGetPayflowLinkTokenArgs { + input: PayflowLinkTokenInput; +} +export interface QueryIsEmailAvailableArgs { + email: Scalars['String']; +} +export interface QueryOrderDataArgs { + orderId: Scalars['String']; +} +export interface QueryPickupLocationsArgs { + area?: InputMaybe; + currentPage?: InputMaybe; + filters?: InputMaybe; + pageSize?: InputMaybe; + productsInfo?: InputMaybe>>; + sort?: InputMaybe; +} +export interface QueryProductsArgs { + currentPage?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + search?: InputMaybe; + sort?: InputMaybe; +} +export interface QueryRouteArgs { + url: Scalars['String']; +} +export interface QueryUrlResolverArgs { + url: Scalars['String']; +} +export interface Region { + code?: Maybe; + /** The unique ID for a `Region` object. */ + id?: Maybe; + name?: Maybe; +} +export interface RemoveCouponFromCartInput { + cart_id: Scalars['String']; +} +export interface RemoveCouponFromCartOutput { + cart?: Maybe; +} +export interface RemoveItemFromCartInput { + cart_id: Scalars['String']; + /** Deprecated. Use `cart_item_uid` instead. */ + cart_item_id?: InputMaybe; + /** Required field. The unique ID for a `CartItemInterface` object */ + cart_item_uid?: InputMaybe; +} +export interface RemoveItemFromCartOutput { + cart: Cart; +} +export interface RemoveProductsFromCompareListInput { + /** An array of product IDs to remove from the compare list */ + products: Array>; + /** The unique identifier of the compare list to modify */ + uid: Scalars['ID']; +} +/** Contains the customer's wish list and any errors encountered */ +export interface RemoveProductsFromWishlistOutput { + /** An array of errors encountered while deleting products from a wish list */ + user_errors: Array>; + /** Contains the wish list with after items were successfully deleted */ + wishlist: Wishlist; +} +export interface ReorderItemsOutput { + /** Contains detailed information about the customer's cart. */ + cart: Cart; + /** An array of reordering errors. */ + userInputErrors: Array>; +} +export interface RevokeCustomerTokenOutput { + result: Scalars['Boolean']; +} +/** Routable entities serve as the model for a rendered page */ +export interface RoutableInterface { + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + sku?: Maybe; + uid?: Maybe; + identifier?: Maybe; +} +/** Comment item details */ +export interface SalesCommentItem { + /** The text of the message */ + message: Scalars['String']; + /** The timestamp of the comment */ + timestamp: Scalars['String']; +} +export interface SalesItemInterface { + /** The entered gift message for the order item */ + gift_message?: Maybe; +} +/** SearchResultPageInfo provides navigation for the query response */ +export interface SearchResultPageInfo { + /** Specifies which page of results to return */ + current_page?: Maybe; + /** Specifies the maximum number of items to return */ + page_size?: Maybe; + /** Total pages */ + total_pages?: Maybe; +} +export interface SelectedBundleOption { + /** @deprecated Use `uid` instead */ + id: Scalars['Int']; + label: Scalars['String']; + type: Scalars['String']; + /** The unique ID for a `SelectedBundleOption` object */ + uid: Scalars['ID']; + values: Array>; +} +export interface SelectedBundleOptionValue { + /** Use `uid` instead */ + id: Scalars['Int']; + label: Scalars['String']; + price: Scalars['Float']; + quantity: Scalars['Float']; + /** The unique ID for a `SelectedBundleOptionValue` object */ + uid: Scalars['ID']; +} +export interface SelectedConfigurableOption { + /** The unique ID for a `ConfigurableProductOptions` object */ + configurable_product_option_uid: Scalars['ID']; + /** The unique ID for a `ConfigurableProductOptionsValues` object */ + configurable_product_option_value_uid: Scalars['ID']; + /** @deprecated Use SelectedConfigurableOption.configurable_product_option_uid instead */ + id: Scalars['Int']; + option_label: Scalars['String']; + /** @deprecated Use SelectedConfigurableOption.configurable_product_option_value_uid instead */ + value_id: Scalars['Int']; + value_label: Scalars['String']; +} +export interface SelectedCustomizableOption { + /** The unique ID for a `CustomizableRadioOption`, `CustomizableDropDownOption`, `CustomizableMultipleOption`, etc. of `CustomizableOptionInterface` objects */ + customizable_option_uid: Scalars['ID']; + /** @deprecated Use SelectedCustomizableOption.customizable_option_uid instead */ + id: Scalars['Int']; + is_required: Scalars['Boolean']; + label: Scalars['String']; + sort_order: Scalars['Int']; + type: Scalars['String']; + values: Array>; +} +export interface SelectedCustomizableOptionValue { + /** The unique ID for a `CustomizableMultipleValue`, `CustomizableRadioValue`, `CustomizableCheckboxValue`, `CustomizableDropDownValue`, etc. objects */ + customizable_option_value_uid: Scalars['ID']; + /** @deprecated Use SelectedCustomizableOptionValue.customizable_option_value_uid instead */ + id: Scalars['Int']; + label: Scalars['String']; + price: CartItemSelectedOptionValuePrice; + value: Scalars['String']; +} +export interface SelectedPaymentMethod { + /** The payment method code */ + code: Scalars['String']; + /** The purchase order number. */ + purchase_order_number?: Maybe; + /** The payment method title. */ + title: Scalars['String']; +} +export interface SelectedShippingMethod { + amount: Money; + /** @deprecated The field should not be used on the storefront */ + base_amount?: Maybe; + carrier_code: Scalars['String']; + carrier_title: Scalars['String']; + method_code: Scalars['String']; + method_title: Scalars['String']; +} +export interface SendEmailToFriendInput { + product_id: Scalars['Int']; + recipients: Array>; + sender: SendEmailToFriendSenderInput; +} +export interface SendEmailToFriendOutput { + recipients?: Maybe>>; + sender?: Maybe; +} +export interface SendEmailToFriendRecipient { + email: Scalars['String']; + name: Scalars['String']; +} +export interface SendEmailToFriendRecipientInput { + email: Scalars['String']; + name: Scalars['String']; +} +export interface SendEmailToFriendSender { + email: Scalars['String']; + message: Scalars['String']; + name: Scalars['String']; +} +export interface SendEmailToFriendSenderInput { + email: Scalars['String']; + message: Scalars['String']; + name: Scalars['String']; +} +export interface SendFriendConfiguration { + /** Indicates whether the Email to a Friend feature is enabled. */ + enabled_for_customers: Scalars['Boolean']; + /** Indicates whether the Email to a Friend feature is enabled for guests. */ + enabled_for_guests: Scalars['Boolean']; +} +export interface SetBillingAddressOnCartInput { + billing_address: BillingAddressInput; + cart_id: Scalars['String']; +} +export interface SetBillingAddressOnCartOutput { + cart: Cart; +} +export interface SetGuestEmailOnCartInput { + cart_id: Scalars['String']; + email: Scalars['String']; +} +export interface SetGuestEmailOnCartOutput { + cart: Cart; +} +export interface SetPaymentMethodAndPlaceOrderInput { + cart_id: Scalars['String']; + payment_method: PaymentMethodInput; +} +export interface SetPaymentMethodOnCartInput { + cart_id: Scalars['String']; + payment_method: PaymentMethodInput; +} +export interface SetPaymentMethodOnCartOutput { + cart: Cart; +} +export interface SetShippingAddressesOnCartInput { + cart_id: Scalars['String']; + shipping_addresses: Array>; +} +export interface SetShippingAddressesOnCartOutput { + cart: Cart; +} +export interface SetShippingMethodsOnCartInput { + cart_id: Scalars['String']; + shipping_methods: Array>; +} +export interface SetShippingMethodsOnCartOutput { + cart: Cart; +} +/** This enumeration defines whether bundle items must be shipped together. */ +export declare enum ShipBundleItemsEnum { + Separately = 'SEPARATELY', + Together = 'TOGETHER', +} +export interface ShipmentItem extends ShipmentItemInterface { + /** The unique ID for a `ShipmentItemInterface` object */ + id: Scalars['ID']; + /** Associated order item */ + order_item?: Maybe; + /** Name of the base product */ + product_name?: Maybe; + /** Sale price for the base product */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** Number of shipped items */ + quantity_shipped: Scalars['Float']; +} +/** Order shipment item details */ +export interface ShipmentItemInterface { + /** The unique ID for a `ShipmentItemInterface` object */ + id: Scalars['ID']; + /** Associated order item */ + order_item?: Maybe; + /** Name of the base product */ + product_name?: Maybe; + /** Sale price for the base product */ + product_sale_price: Money; + /** SKU of the base product */ + product_sku: Scalars['String']; + /** Number of shipped items */ + quantity_shipped: Scalars['Float']; +} +/** Order shipment tracking details */ +export interface ShipmentTracking { + /** The shipping carrier for the order delivery */ + carrier: Scalars['String']; + /** The tracking number of the order shipment */ + number?: Maybe; + /** The shipment tracking title */ + title: Scalars['String']; +} +export interface ShippingAddressInput { + address?: InputMaybe; + customer_address_id?: InputMaybe; + customer_notes?: InputMaybe; + /** The code of Pickup Location which will be used for In-Store Pickup. */ + pickup_location_code?: InputMaybe; +} +export interface ShippingCartAddress extends CartAddressInterface { + available_shipping_methods?: Maybe>>; + /** @deprecated `cart_items_v2` should be used instead */ + cart_items?: Maybe>>; + cart_items_v2?: Maybe>>; + city: Scalars['String']; + company?: Maybe; + country: CartAddressCountry; + customer_notes?: Maybe; + firstname: Scalars['String']; + /** @deprecated This information shoud not be exposed on frontend */ + items_weight?: Maybe; + lastname: Scalars['String']; + pickup_location_code?: Maybe; + postcode?: Maybe; + region?: Maybe; + selected_shipping_method?: Maybe; + street: Array>; + telephone: Scalars['String']; +} +/** Defines an individual shipping discount. This discount can be applied to shipping. */ +export interface ShippingDiscount { + /** The amount of the discount */ + amount: Money; +} +/** The Shipping handling details */ +export interface ShippingHandling { + /** The shipping amount, excluding tax */ + amount_excluding_tax?: Maybe; + /** The shipping amount, including tax */ + amount_including_tax?: Maybe; + /** The applied discounts to the shipping */ + discounts?: Maybe>>; + /** Contains details about taxes applied for shipping */ + taxes?: Maybe>>; + /** The total amount for shipping */ + total_amount: Money; +} +export interface ShippingMethodInput { + carrier_code: Scalars['String']; + method_code: Scalars['String']; +} +/** Simple Cart Item */ +export interface SimpleCartItem extends CartItemInterface { + customizable_options: Array>; + /** The entered gift message for the cart item */ + gift_message?: Maybe; + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +/** A simple product is tangible and is usually sold in single units or in fixed quantities */ +export interface SimpleProduct extends CustomizableProductInterface, PhysicalProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** An array of options for a customizable product. */ + options?: Maybe>>; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; + /** The weight of the item, in units defined by the store. */ + weight?: Maybe; +} +/** A simple product is tangible and is usually sold in single units or in fixed quantities */ +export interface SimpleProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +export interface SimpleProductCartItemInput { + customizable_options?: InputMaybe>>; + data: CartItemInput; +} +/** A simple product wish list Item */ +export interface SimpleWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +/** This enumeration indicates whether to return results in ascending or descending order */ +export enum SortEnum { + Asc = 'ASC', + Desc = 'DESC', +} +export interface SortField { + /** Label of sort field. */ + label?: Maybe; + /** Attribute code of sort field. */ + value?: Maybe; +} +/** SortFields contains a default value for sort fields and all available sort fields. */ +export interface SortFields { + /** Default value of sort fields. */ + default?: Maybe; + /** Available sort fields. */ + options?: Maybe>>; +} +/** The type contains information about a store config */ +export interface StoreConfig { + /** Footer Miscellaneous HTML */ + absolute_footer?: Maybe; + /** Indicates whether guest users can write product reviews. Possible values: 1 (Yes) and 0 (No) */ + allow_guests_to_write_product_reviews?: Maybe; + /** The value of the Allow Gift Messages for Order Items option */ + allow_items?: Maybe; + /** The value of the Allow Gift Messages on Order Level option */ + allow_order?: Maybe; + /** Enable autocomplete on login and forgot password forms */ + autocomplete_on_storefront?: Maybe; + /** Base currency code */ + base_currency_code?: Maybe; + /** Base link URL for the store */ + base_link_url?: Maybe; + /** Base media URL for the store */ + base_media_url?: Maybe; + /** Base static URL for the store */ + base_static_url?: Maybe; + /** Base URL for the store */ + base_url?: Maybe; + /** Braintree cc vault status. */ + braintree_cc_vault_active?: Maybe; + /** Default Sort By. */ + catalog_default_sort_by?: Maybe; + /** Corresponds to the 'Display Prices In Product Lists' field. It indicates how FPT information is displayed on category pages */ + category_fixed_product_tax_display_setting?: Maybe; + /** Category URL Suffix. */ + category_url_suffix?: Maybe; + /** CMS Home Page */ + cms_home_page?: Maybe; + /** CMS No Cookies Page */ + cms_no_cookies?: Maybe; + /** CMS No Route Page */ + cms_no_route?: Maybe; + /** + * A code assigned to the store to identify it + * @deprecated Use `store_code` instead. + */ + code?: Maybe; + /** The configuration setting determines which thumbnail should be used in the cart for configurable products. */ + configurable_thumbnail_source?: Maybe; + /** Copyright */ + copyright?: Maybe; + /** Default Meta Description */ + default_description?: Maybe; + /** Default display currency code */ + default_display_currency_code?: Maybe; + /** Default Meta Keywords */ + default_keywords?: Maybe; + /** Default Page Title */ + default_title?: Maybe; + /** Display Demo Store Notice */ + demonotice?: Maybe; + /** Default Web URL */ + front?: Maybe; + /** Products per Page on Grid Default Value. */ + grid_per_page?: Maybe; + /** Products per Page on Grid Allowed Values. */ + grid_per_page_values?: Maybe; + /** Scripts and Style Sheets */ + head_includes?: Maybe; + /** Favicon Icon */ + head_shortcut_icon?: Maybe; + /** Logo Image */ + header_logo_src?: Maybe; + /** + * The ID number assigned to the store + * @deprecated Use `store_code` instead. + */ + id?: Maybe; + /** Indicates whether the store view has been designated as the default within the store group */ + is_default_store?: Maybe; + /** Indicates whether the store group has been designated as the default within the website */ + is_default_store_group?: Maybe; + /** List Mode. */ + list_mode?: Maybe; + /** Products per Page on List Default Value. */ + list_per_page?: Maybe; + /** Products per Page on List Allowed Values. */ + list_per_page_values?: Maybe; + /** Store locale */ + locale?: Maybe; + /** Logo Image Alt */ + logo_alt?: Maybe; + /** Logo Attribute Height */ + logo_height?: Maybe; + /** Logo Attribute Width */ + logo_width?: Maybe; + /** Indicates whether wishlists are enabled (1) or disabled (0) */ + magento_wishlist_general_is_enabled?: Maybe; + /** The minimum number of characters required for a valid password. */ + minimum_password_length?: Maybe; + /** Default No-route URL */ + no_route?: Maybe; + /** Payflow Pro vault status. */ + payment_payflowpro_cc_vault_active?: Maybe; + /** Corresponds to the 'Display Prices On Product View Page' field. It indicates how FPT information is displayed on product pages */ + product_fixed_product_tax_display_setting?: Maybe; + /** Indicates whether product reviews are enabled. Possible values: 1 (Yes) and 0 (No) */ + product_reviews_enabled?: Maybe; + /** Product URL Suffix. */ + product_url_suffix?: Maybe; + /** The number of different character classes required in a password (lowercase, uppercase, digits, special characters). */ + required_character_classes_number?: Maybe; + /** + * The ID of the root category + * @deprecated Use `root_category_uid` instead + */ + root_category_id?: Maybe; + /** The unique ID for a `CategoryInterface` object. */ + root_category_uid?: Maybe; + /** Corresponds to the 'Display Prices In Sales Modules' field. It indicates how FPT information is displayed on cart, checkout, and order pages */ + sales_fixed_product_tax_display_setting?: Maybe; + /** Secure base link URL for the store */ + secure_base_link_url?: Maybe; + /** Secure base media URL for the store */ + secure_base_media_url?: Maybe; + /** Secure base static URL for the store */ + secure_base_static_url?: Maybe; + /** Secure base URL for the store */ + secure_base_url?: Maybe; + /** Email to a Friend configuration. */ + send_friend?: Maybe; + /** Show Breadcrumbs for CMS Pages */ + show_cms_breadcrumbs?: Maybe; + /** The unique ID of the store view. In the Admin, this is called the Store View Code. When making a GraphQL call, assign this value to the `Store` header to provide the scope */ + store_code?: Maybe; + /** The unique ID assigned to the store group. In the Admin, this is called the Store Name */ + store_group_code?: Maybe; + /** The label assigned to the store group */ + store_group_name?: Maybe; + /** The label assigned to the store view */ + store_name?: Maybe; + /** The store view sort order */ + store_sort_order?: Maybe; + /** Timezone of the store */ + timezone?: Maybe; + /** Page Title Prefix */ + title_prefix?: Maybe; + /** Page Title Separator. */ + title_separator?: Maybe; + /** Page Title Suffix */ + title_suffix?: Maybe; + /** The configuration determines if the store code should be used in the URL */ + use_store_in_url?: Maybe; + /** The unique ID for the website */ + website_code?: Maybe; + /** + * The ID number assigned to the website store + * @deprecated The field should not be used on the storefront + */ + website_id?: Maybe; + /** The label assigned to the website */ + website_name?: Maybe; + /** The unit of weight */ + weight_unit?: Maybe; + /** Welcome Text */ + welcome?: Maybe; +} +export interface StorefrontProperties { + /** The relative position of the attribute in the layered navigation block */ + position?: Maybe; + /** Indicates whether the attribute is filterable with results, without results, or not at all */ + use_in_layered_navigation?: Maybe; + /** Indicates whether the attribute is displayed in product listings */ + use_in_product_listing?: Maybe; + /** Indicates whether the attribute can be used in layered navigation on search results pages */ + use_in_search_results_layered_navigation?: Maybe; + /** Indicates whether the attribute is displayed on product pages */ + visible_on_catalog_pages?: Maybe; +} +export interface SubscribeEmailToNewsletterOutput { + /** Returns the status of the subscription request */ + status?: Maybe; +} +export enum SubscriptionStatusesEnum { + NotActive = 'NOT_ACTIVE', + Subscribed = 'SUBSCRIBED', + Unconfirmed = 'UNCONFIRMED', + Unsubscribed = 'UNSUBSCRIBED', +} +export interface SwatchData { + /** Type of swatch filter item: 1 - text, 2 - image */ + type?: Maybe; + /** Value for swatch item (text or image link) */ + value?: Maybe; +} +export interface SwatchDataInterface { + /** Value of swatch item (HEX color code, image link or textual value) */ + value?: Maybe; +} +export interface SwatchLayerFilterItem extends LayerFilterItemInterface, SwatchLayerFilterItemInterface { + /** + * Count of items by filter. + * @deprecated Use AggregationOption.count instead. + */ + items_count?: Maybe; + /** + * Filter label. + * @deprecated Use AggregationOption.label instead. + */ + label?: Maybe; + /** Data required to render swatch filter item */ + swatch_data?: Maybe; + /** + * Value for filter request variable to be used in query. + * @deprecated Use AggregationOption.value instead. + */ + value_string?: Maybe; +} +export interface SwatchLayerFilterItemInterface { + /** Data required to render swatch filter item */ + swatch_data?: Maybe; +} +/** The tax item details */ +export interface TaxItem { + /** The amount of tax applied to the item */ + amount: Money; + /** The rate used to calculate the tax */ + rate: Scalars['Float']; + /** A title that describes the tax */ + title: Scalars['String']; +} +export interface TextSwatchData extends SwatchDataInterface { + /** Value of swatch item (HEX color code, image link or textual value) */ + value?: Maybe; +} +/** A price based on the quantity purchased. */ +export interface TierPrice { + /** The price discount that this tier represents. */ + discount?: Maybe; + final_price?: Maybe; + /** The minimum number of items that must be purchased to qualify for this price tier. */ + quantity?: Maybe; +} +export interface TrackingData { + /** Is Page Tracking enabled */ + page_tracking_enabled?: Maybe; + /** dotdigital region prefix */ + region_prefix?: Maybe; + /** Is ROI Tracking enabled */ + roi_tracking_enabled?: Maybe; + /** Web Behaviour Tracking profile ID */ + wbt_profile_id?: Maybe; +} +export interface UpdateCartItemsInput { + cart_id: Scalars['String']; + cart_items: Array>; +} +export interface UpdateCartItemsOutput { + cart: Cart; +} +/** Contains the customer's wish list and any errors encountered */ +export interface UpdateProductsInWishlistOutput { + /** An array of errors encountered while updating products in a wish list */ + user_errors: Array>; + /** Contains the wish list with all items that were successfully updated */ + wishlist: Wishlist; +} +/** The object contains URL rewrite details */ +export interface UrlRewrite { + /** Request parameters */ + parameters?: Maybe>>; + /** Request URL */ + url?: Maybe; +} +/** This enumeration defines the entity type. */ +export declare enum UrlRewriteEntityTypeEnum { + Category = 'CATEGORY', + CmsPage = 'CMS_PAGE', + Product = 'PRODUCT', +} +export declare enum UseInLayeredNavigationOptions { + FilterableNoResult = 'FILTERABLE_NO_RESULT', + FilterableWithResults = 'FILTERABLE_WITH_RESULTS', + No = 'NO', +} +/** Required input for payment methods with Vault support. */ +export interface VaultTokenInput { + /** The public hash of the payment token */ + public_hash: Scalars['String']; +} +/** Virtual Cart Item */ +export interface VirtualCartItem extends CartItemInterface { + customizable_options: Array>; + /** @deprecated Use `uid` instead */ + id: Scalars['String']; + prices?: Maybe; + product: ProductInterface; + quantity: Scalars['Float']; + /** The unique ID for a `CartItemInterface` object */ + uid: Scalars['ID']; +} +/** A virtual product is a non-tangible product that does not require shipping and is not kept in inventory */ +export interface VirtualProduct extends CustomizableProductInterface, ProductInterface, RoutableInterface { + activity?: Maybe; + /** + * The attribute set assigned to the product. + * @deprecated The field should not be used on the storefront. + */ + attribute_set_id?: Maybe; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Products' is enabled */ + canonical_url?: Maybe; + /** The categories assigned to a product. */ + categories?: Maybe>>; + category_gear?: Maybe; + climate?: Maybe; + collar?: Maybe; + color?: Maybe; + /** The product's country of origin. */ + country_of_manufacture?: Maybe; + /** + * Timestamp indicating when the product was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + /** Crosssell Products */ + crosssell_products?: Maybe>>; + /** Detailed information about the product. The value can include simple HTML tags. */ + description?: Maybe; + eco_collection?: Maybe; + erin_recommends?: Maybe; + features_bags?: Maybe; + format?: Maybe; + gender?: Maybe; + /** Indicates whether a gift message is available. */ + gift_message_available?: Maybe; + /** + * The ID number assigned to the product. + * @deprecated Use the `uid` field instead. + */ + id?: Maybe; + /** The relative path to the main image on the product page. */ + image?: Maybe; + /** A number representing the product's manufacturer. */ + manufacturer?: Maybe; + material?: Maybe; + /** An array of Media Gallery objects. */ + media_gallery?: Maybe>>; + /** + * An array of MediaGalleryEntry objects. + * @deprecated Use product's `media_gallery` instead + */ + media_gallery_entries?: Maybe>>; + /** A brief overview of the product for search results listings, maximum 255 characters. */ + meta_description?: Maybe; + /** A comma-separated list of keywords that are visible only to search engines. */ + meta_keyword?: Maybe; + /** A string that is displayed in the title bar and tab of the browser and in search results lists. */ + meta_title?: Maybe; + /** The product name. Customers use this name to identify the product. */ + name?: Maybe; + new?: Maybe; + /** + * The beginning date for new product listings, and determines if the product is featured as a new product. + * @deprecated The field should not be used on the storefront. + */ + new_from_date?: Maybe; + /** + * The end date for new product listings. + * @deprecated The field should not be used on the storefront. + */ + new_to_date?: Maybe; + /** Product stock only x left count */ + only_x_left_in_stock?: Maybe; + /** An array of options for a customizable product. */ + options?: Maybe>>; + /** If the product has multiple options, determines where they appear on the product page. */ + options_container?: Maybe; + pattern?: Maybe; + performance_fabric?: Maybe; + /** + * A ProductPrices object, indicating the price of an item. + * @deprecated Use price_range for product price information. + */ + price?: Maybe; + /** A PriceRange object, indicating the range of prices for the product */ + price_range: PriceRange; + /** An array of TierPrice objects. */ + price_tiers?: Maybe>>; + /** An array of ProductLinks objects. */ + product_links?: Maybe>>; + /** The average of all the ratings given to the product. */ + rating_summary: Scalars['Float']; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** Related Products */ + related_products?: Maybe>>; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** The total count of all the reviews given to the product. */ + review_count: Scalars['Int']; + /** The list of products reviews. */ + reviews: ProductReviews; + sale?: Maybe; + /** A short description of the product. Its use depends on the theme. */ + short_description?: Maybe; + size?: Maybe; + /** A number or code assigned to a product to identify the product, options, price, and manufacturer. */ + sku?: Maybe; + sleeve?: Maybe; + /** The relative path to the small image, which is used on catalog pages. */ + small_image?: Maybe; + /** + * The beginning date that a product has a special price. + * @deprecated The field should not be used on the storefront. + */ + special_from_date?: Maybe; + /** The discounted price of the product. */ + special_price?: Maybe; + /** The end date that a product has a special price. */ + special_to_date?: Maybe; + /** Stock status of the product */ + stock_status?: Maybe; + strap_bags?: Maybe; + style_bags?: Maybe; + style_bottom?: Maybe; + style_general?: Maybe; + /** The file name of a swatch image */ + swatch_image?: Maybe; + /** The relative path to the product's thumbnail image. */ + thumbnail?: Maybe; + /** + * The price when tier pricing is in effect and the items purchased threshold has been reached. + * @deprecated Use price_tiers for product tier price information. + */ + tier_price?: Maybe; + /** + * An array of ProductTierPrices objects. + * @deprecated Use price_tiers for product tier price information. + */ + tier_prices?: Maybe>>; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** + * One of simple, virtual, bundle, downloadable, grouped, or configurable. + * @deprecated Use __typename instead. + */ + type_id?: Maybe; + /** The unique ID for a `ProductInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the product was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** Upsell Products */ + upsell_products?: Maybe>>; + /** The part of the URL that identifies the product */ + url_key?: Maybe; + /** @deprecated Use product's `canonical_url` or url rewrites instead */ + url_path?: Maybe; + /** URL rewrites list */ + url_rewrites?: Maybe>>; + /** The part of the product URL that is appended after the url key */ + url_suffix?: Maybe; + /** + * An array of websites in which the product is available. + * @deprecated The field should not be used on the storefront. + */ + websites?: Maybe>>; +} +/** A virtual product is a non-tangible product that does not require shipping and is not kept in inventory */ +export interface VirtualProductReviewsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; +} +export interface VirtualProductCartItemInput { + customizable_options?: InputMaybe>>; + data: CartItemInput; +} +/** A virtual product wish list item */ +export interface VirtualWishlistItem extends WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +/** Website is deprecated because it is should not be used on storefront. The type contains information about a website */ +export interface Website { + /** + * A code assigned to the website to identify it + * @deprecated The field should not be used on the storefront. + */ + code?: Maybe; + /** + * The default group ID that the website has + * @deprecated The field should not be used on the storefront. + */ + default_group_id?: Maybe; + /** + * The ID number assigned to the website + * @deprecated The field should not be used on the storefront. + */ + id?: Maybe; + /** + * Specifies if this is the default website + * @deprecated The field should not be used on the storefront. + */ + is_default?: Maybe; + /** + * The website name. Websites use this name to identify it easier. + * @deprecated The field should not be used on the storefront. + */ + name?: Maybe; + /** + * The attribute to use for sorting websites + * @deprecated The field should not be used on the storefront. + */ + sort_order?: Maybe; +} +/** An error encountered while performing operations with WishList. */ +export interface WishListUserInputError { + /** Wishlist-specific error code */ + code: WishListUserInputErrorType; + /** A localized error message */ + message: Scalars['String']; +} +export declare enum WishListUserInputErrorType { + ProductNotFound = 'PRODUCT_NOT_FOUND', + Undefined = 'UNDEFINED', +} +export interface Wishlist { + /** The unique ID for a `Wishlist` object */ + id?: Maybe; + /** @deprecated Use field `items_v2` from type `Wishlist` instead */ + items?: Maybe>>; + /** The number of items in the wish list */ + items_count?: Maybe; + /** An array of items in the customer's wish list */ + items_v2?: Maybe; + /** An encrypted code that Magento uses to link to the wish list */ + sharing_code?: Maybe; + /** The time of the last modification to the wish list */ + updated_at?: Maybe; +} + +export interface WishlistCartUserInputError { + /** An error code that describes the error encountered */ + code: WishlistCartUserInputErrorType; + /** A localized error message */ + message: Scalars['String']; + /** The unique ID of the `Wishlist` object containing an error */ + wishlistId: Scalars['ID']; + /** The unique ID of the wish list item containing an error */ + wishlistItemId: Scalars['ID']; +} +export enum WishlistCartUserInputErrorType { + InsufficientStock = 'INSUFFICIENT_STOCK', + NotSalable = 'NOT_SALABLE', + ProductNotFound = 'PRODUCT_NOT_FOUND', + Undefined = 'UNDEFINED', +} +export interface WishlistItem { + /** The time when the customer added the item to the wish list */ + added_at?: Maybe; + /** The customer's comment about this item */ + description?: Maybe; + /** The unique ID for a `WishlistItem` object */ + id?: Maybe; + product?: Maybe; + /** The quantity of this wish list item */ + qty?: Maybe; +} +/** Defines the items to add to a wish list */ +export interface WishlistItemInput { + /** An array of options that the customer entered */ + entered_options?: InputMaybe>>; + /** For complex product types, the SKU of the parent product */ + parent_sku?: InputMaybe; + /** The amount or number of items to add */ + quantity: Scalars['Float']; + /** An array of strings corresponding to options the customer selected */ + selected_options?: InputMaybe>>; + /** The SKU of the product to add. For complex product types, specify the child product SKU */ + sku: Scalars['String']; +} +export interface WishlistItemInterface { + /** The date and time the item was added to the wish list */ + added_at: Scalars['String']; + /** Custom options selected for the wish list item */ + customizable_options: Array>; + /** The description of the item */ + description?: Maybe; + /** The unique ID for a `WishlistItemInterface` object */ + id: Scalars['ID']; + /** Product details of the wish list item */ + product?: Maybe; + /** The quantity of this wish list item */ + quantity: Scalars['Float']; +} +/** Defines updates to items in a wish list */ +export interface WishlistItemUpdateInput { + /** Customer-entered comments about the item */ + description?: InputMaybe; + /** An array of options that the customer entered */ + entered_options?: InputMaybe>>; + /** The new amount or number of this item */ + quantity?: InputMaybe; + /** An array of strings corresponding to options the customer selected */ + selected_options?: InputMaybe>>; + /** The unique ID for a `WishlistItemInterface` object */ + wishlist_item_id: Scalars['ID']; +} +export interface WishlistItems { + /** A list of items in the wish list */ + items: Array>; + /** Contains pagination metadata */ + page_info?: Maybe; +} +/** Deprecated: `Wishlist` type should be used instead */ +export interface WishlistOutput { + /** + * An array of items in the customer's wish list + * @deprecated Use field `items` from type `Wishlist` instead + */ + items?: Maybe>>; + /** + * The number of items in the wish list + * @deprecated Use field `items_count` from type `Wishlist` instead + */ + items_count?: Maybe; + /** + * When multiple wish lists are enabled, the name the customer assigns to the wishlist + * @deprecated This field is related to Commerce functionality and is always `null` in Open Source edition + */ + name?: Maybe; + /** + * An encrypted code that Magento uses to link to the wish list + * @deprecated Use field `sharing_code` from type `Wishlist` instead + */ + sharing_code?: Maybe; + /** + * The time of the last modification to the wish list + * @deprecated Use field `updated_at` from type `Wishlist` instead + */ + updated_at?: Maybe; +} +export interface CreateEmptyCartInput { + cart_id?: InputMaybe; +} +export interface CreateKlarnaPaymentsSessionInput { + cart_id: Scalars['String']; +} +export interface CreateKlarnaPaymentsSessionOutput { + /** The payment method client token */ + client_token?: Maybe; + /** The payment method categories */ + payment_method_categories?: Maybe>>; +} +export declare type AddBundleProductsToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type AddBundleProductsToCartMutation = { + addBundleProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddConfigurableProductsToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type AddConfigurableProductsToCartMutation = { + addConfigurableProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddDownloadableProductsToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type AddDownloadableProductsToCartMutation = { + addDownloadableProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddProductsToWishlistMutationVariables = Exact<{ + id: Scalars['ID']; + items: Array | WishlistItemInput; +}>; +export declare type AddProductsToWishlistMutation = { + addProductsToWishlist?: { + wishlist: { + id?: string | null | undefined; + items_count?: number | null | undefined; + sharing_code?: string | null | undefined; + items_v2?: { + items: Array<{ + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | null | undefined>; + page_info?: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + } | null | undefined; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddProductsToCartMutationVariables = Exact<{ + cartId: Scalars['String']; + cartItems: Array | CartItemInput; +}>; +export declare type AddProductsToCartMutation = { + addProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddSimpleProductsToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type AddSimpleProductsToCartMutation = { + addSimpleProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AddVirtualProductsToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type AddVirtualProductsToCartMutation = { + addVirtualProductsToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type ApplyCouponToCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type ApplyCouponToCartMutation = { + applyCouponToCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type AvailableStoresQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type AvailableStoresQuery = { + availableStores?: Array<{ + absolute_footer?: string | null | undefined; + allow_guests_to_write_product_reviews?: string | null | undefined; + allow_items?: string | null | undefined; + allow_order?: string | null | undefined; + autocomplete_on_storefront?: boolean | null | undefined; + base_currency_code?: string | null | undefined; + base_link_url?: string | null | undefined; + base_media_url?: string | null | undefined; + base_static_url?: string | null | undefined; + base_url?: string | null | undefined; + catalog_default_sort_by?: string | null | undefined; + category_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + category_url_suffix?: string | null | undefined; + cms_home_page?: string | null | undefined; + cms_no_cookies?: string | null | undefined; + cms_no_route?: string | null | undefined; + code?: string | null | undefined; + configurable_thumbnail_source?: string | null | undefined; + copyright?: string | null | undefined; + default_description?: string | null | undefined; + default_display_currency_code?: string | null | undefined; + default_keywords?: string | null | undefined; + default_title?: string | null | undefined; + front?: string | null | undefined; + grid_per_page?: number | null | undefined; + grid_per_page_values?: string | null | undefined; + head_includes?: string | null | undefined; + head_shortcut_icon?: string | null | undefined; + header_logo_src?: string | null | undefined; + id?: number | null | undefined; + is_default_store?: boolean | null | undefined; + is_default_store_group?: boolean | null | undefined; + list_mode?: string | null | undefined; + list_per_page?: number | null | undefined; + list_per_page_values?: string | null | undefined; + locale?: string | null | undefined; + logo_alt?: string | null | undefined; + logo_height?: number | null | undefined; + logo_width?: number | null | undefined; + magento_wishlist_general_is_enabled?: string | null | undefined; + minimum_password_length?: string | null | undefined; + no_route?: string | null | undefined; + payment_payflowpro_cc_vault_active?: string | null | undefined; + product_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + product_reviews_enabled?: string | null | undefined; + product_url_suffix?: string | null | undefined; + required_character_classes_number?: string | null | undefined; + root_category_id?: number | null | undefined; + root_category_uid?: string | null | undefined; + sales_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + secure_base_link_url?: string | null | undefined; + secure_base_media_url?: string | null | undefined; + secure_base_static_url?: string | null | undefined; + secure_base_url?: string | null | undefined; + show_cms_breadcrumbs?: number | null | undefined; + store_code?: string | null | undefined; + store_group_code?: string | null | undefined; + store_group_name?: string | null | undefined; + store_name?: string | null | undefined; + store_sort_order?: number | null | undefined; + timezone?: string | null | undefined; + title_prefix?: string | null | undefined; + title_separator?: string | null | undefined; + title_suffix?: string | null | undefined; + use_store_in_url?: boolean | null | undefined; + website_code?: string | null | undefined; + website_id?: number | null | undefined; + website_name?: string | null | undefined; + weight_unit?: string | null | undefined; + welcome?: string | null | undefined; + } | null | undefined> | null | undefined; +}; +export declare type CartQueryVariables = Exact<{ + cartId: Scalars['String']; +}>; +export declare type CartQuery = { + cart?: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + } | null | undefined; +}; +export declare type CategoryListQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CategoryListQuery = { + categories?: { + items?: Array<{ + product_count?: number | null | undefined; + name?: string | null | undefined; + uid: string; + children?: Array<{ + include_in_menu?: number | null | undefined; + is_anchor?: number | null | undefined; + level?: number | null | undefined; + name?: string | null | undefined; + position?: number | null | undefined; + product_count?: number | null | undefined; + uid: string; + url_path?: string | null | undefined; + url_suffix?: string | null | undefined; + children?: Array<{ + include_in_menu?: number | null | undefined; + is_anchor?: number | null | undefined; + level?: number | null | undefined; + name?: string | null | undefined; + position?: number | null | undefined; + product_count?: number | null | undefined; + uid: string; + url_path?: string | null | undefined; + url_suffix?: string | null | undefined; + children?: Array<{ + include_in_menu?: number | null | undefined; + is_anchor?: number | null | undefined; + level?: number | null | undefined; + name?: string | null | undefined; + position?: number | null | undefined; + product_count?: number | null | undefined; + uid: string; + url_path?: string | null | undefined; + url_suffix?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CategorySearchQueryVariables = Exact<{ + filters?: InputMaybe; +}>; +export declare type CategorySearchQuery = { + categoryList?: Array<{ + include_in_menu?: number | null | undefined; + is_anchor?: number | null | undefined; + level?: number | null | undefined; + name?: string | null | undefined; + position?: number | null | undefined; + product_count?: number | null | undefined; + uid: string; + url_path?: string | null | undefined; + url_suffix?: string | null | undefined; + } | null | undefined> | null | undefined; +}; +export declare type ChangeCustomerPasswordMutationVariables = Exact<{ + currentPassword: Scalars['String']; + newPassword: Scalars['String']; +}>; +export declare type ChangeCustomerPasswordMutation = { + changeCustomerPassword?: { + date_of_birth?: string | null | undefined; + default_billing?: string | null | undefined; + default_shipping?: string | null | undefined; + email?: string | null | undefined; + firstname?: string | null | undefined; + is_subscribed?: boolean | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + prefix?: string | null | undefined; + suffix?: string | null | undefined; + taxvat?: string | null | undefined; + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CmsBlockQueryVariables = Exact<{ + identifiers?: InputMaybe> | InputMaybe>; +}>; +export declare type CmsBlockQuery = { + cmsBlocks?: { + items?: Array<{ + content?: string | null | undefined; + identifier?: string | null | undefined; + title?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CmsPageQueryVariables = Exact<{ + identifier?: InputMaybe; +}>; +export declare type CmsPageQuery = { + cmsPage?: { + identifier?: string | null | undefined; + content?: string | null | undefined; + title?: string | null | undefined; + meta_title?: string | null | undefined; + meta_description?: string | null | undefined; + content_heading?: string | null | undefined; + } | null | undefined; +}; +export declare type CountriesListQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CountriesListQuery = { + countries?: Array<{ + id?: string | null | undefined; + two_letter_abbreviation?: string | null | undefined; + full_name_locale?: string | null | undefined; + full_name_english?: string | null | undefined; + } | null | undefined> | null | undefined; +}; +export declare type CountryInformationQueryVariables = Exact<{ + id?: InputMaybe; +}>; +export declare type CountryInformationQuery = { + country?: { + id?: string | null | undefined; + two_letter_abbreviation?: string | null | undefined; + full_name_locale?: string | null | undefined; + full_name_english?: string | null | undefined; + available_regions?: Array<{ + id?: number | null | undefined; + code?: string | null | undefined; + name?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CreateCustomerMutationVariables = Exact<{ + input: CustomerCreateInput; +}>; +export declare type CreateCustomerMutation = { + createCustomerV2?: { + customer: { + date_of_birth?: string | null | undefined; + default_billing?: string | null | undefined; + default_shipping?: string | null | undefined; + email?: string | null | undefined; + firstname?: string | null | undefined; + is_subscribed?: boolean | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + prefix?: string | null | undefined; + suffix?: string | null | undefined; + taxvat?: string | null | undefined; + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + }; + } | null | undefined; +}; +export declare type CreateCustomerAddressMutationVariables = Exact<{ + input: CustomerAddressInput; +}>; +export declare type CreateCustomerAddressMutation = { + createCustomerAddress?: { + id?: number | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + street?: Array | null | undefined; + telephone?: string | null | undefined; + postcode?: string | null | undefined; + city?: string | null | undefined; + default_shipping?: boolean | null | undefined; + default_billing?: boolean | null | undefined; + vat_id?: string | null | undefined; + region?: { + region?: string | null | undefined; + region_id?: number | null | undefined; + region_code?: string | null | undefined; + } | null | undefined; + } | null | undefined; +}; +export declare type CreateEmptyCartMutationVariables = Exact<{ + [key: string]: never; +}>; +export declare type CreateEmptyCartMutation = { + createEmptyCart?: string | null | undefined; +}; +export declare type CreateProductReviewMutationVariables = Exact<{ + input: CreateProductReviewInput; +}>; +export declare type CreateProductReviewMutation = { + createProductReview: { + review: { + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + }; + }; +}; +export declare type CurrencyQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CurrencyQuery = { + currency?: { + available_currency_codes?: Array | null | undefined; + base_currency_code?: string | null | undefined; + base_currency_symbol?: string | null | undefined; + default_display_currecy_code?: string | null | undefined; + default_display_currecy_symbol?: string | null | undefined; + default_display_currency_code?: string | null | undefined; + default_display_currency_symbol?: string | null | undefined; + exchange_rates?: Array<{ + currency_to?: string | null | undefined; + rate?: number | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CustomerQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CustomerQuery = { + customer?: { + date_of_birth?: string | null | undefined; + default_billing?: string | null | undefined; + default_shipping?: string | null | undefined; + email?: string | null | undefined; + firstname?: string | null | undefined; + is_subscribed?: boolean | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + prefix?: string | null | undefined; + suffix?: string | null | undefined; + taxvat?: string | null | undefined; + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type CustomerCartQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CustomerCartQuery = { + customerCart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; +}; +export declare type CustomerOrdersQueryVariables = Exact<{ + currentPage?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; +}>; +export declare type CustomerOrdersQuery = { + customer?: { + orders?: { + total_count?: number | null | undefined; + items: Array<{ + order_number: string; + id: string; + created_at?: string | null | undefined; + grand_total?: number | null | undefined; + status: string; + shipping_method?: string | null | undefined; + total?: { + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + base_grand_total: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + shipping_handling?: { + amount_excluding_tax?: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + } | null | undefined; + amount_including_tax?: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + } | null | undefined; + discounts?: Array<{ + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + taxes?: Array<{ + rate: number; + title: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + total_amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + subtotal: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + taxes?: Array<{ + rate: number; + title: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + total_shipping: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + total_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + comments?: Array<{ + message: string; + timestamp: string; + } | null | undefined> | null | undefined; + invoices: Array<{ + id: string; + number: string; + comments?: Array<{ + message: string; + timestamp: string; + } | null | undefined> | null | undefined; + items?: Array<{ + id: string; + product_name?: string | null | undefined; + product_sku: string; + quantity_invoiced?: number | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | { + id: string; + product_name?: string | null | undefined; + product_sku: string; + quantity_invoiced?: number | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | { + id: string; + product_name?: string | null | undefined; + product_sku: string; + quantity_invoiced?: number | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + total?: { + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + base_grand_total: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + shipping_handling?: { + amount_excluding_tax?: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + } | null | undefined; + amount_including_tax?: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + } | null | undefined; + discounts?: Array<{ + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + taxes?: Array<{ + rate: number; + title: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + total_amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + subtotal: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + taxes?: Array<{ + rate: number; + title: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + total_shipping: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + total_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + items?: Array<{ + id: string; + product_name?: string | null | undefined; + product_sku: string; + product_type?: string | null | undefined; + product_url_key?: string | null | undefined; + quantity_canceled?: number | null | undefined; + quantity_invoiced?: number | null | undefined; + quantity_ordered?: number | null | undefined; + quantity_refunded?: number | null | undefined; + quantity_returned?: number | null | undefined; + quantity_shipped?: number | null | undefined; + status?: string | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + entered_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + selected_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + } | { + id: string; + product_name?: string | null | undefined; + product_sku: string; + product_type?: string | null | undefined; + product_url_key?: string | null | undefined; + quantity_canceled?: number | null | undefined; + quantity_invoiced?: number | null | undefined; + quantity_ordered?: number | null | undefined; + quantity_refunded?: number | null | undefined; + quantity_returned?: number | null | undefined; + quantity_shipped?: number | null | undefined; + status?: string | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + entered_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + selected_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + } | { + id: string; + product_name?: string | null | undefined; + product_sku: string; + product_type?: string | null | undefined; + product_url_key?: string | null | undefined; + quantity_canceled?: number | null | undefined; + quantity_invoiced?: number | null | undefined; + quantity_ordered?: number | null | undefined; + quantity_refunded?: number | null | undefined; + quantity_returned?: number | null | undefined; + quantity_shipped?: number | null | undefined; + status?: string | null | undefined; + discounts?: Array<{ + label: string; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + entered_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + selected_options?: Array<{ + label: string; + value: string; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + payment_methods?: Array<{ + name: string; + type: string; + additional_data?: Array<{ + name?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + shipments?: Array<{ + id: string; + number: string; + comments?: Array<{ + message: string; + timestamp: string; + } | null | undefined> | null | undefined; + tracking?: Array<{ + carrier: string; + number?: string | null | undefined; + title: string; + } | null | undefined> | null | undefined; + items?: Array<{ + id: string; + product_name?: string | null | undefined; + product_sku: string; + quantity_shipped: number; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | { + id: string; + product_name?: string | null | undefined; + product_sku: string; + quantity_shipped: number; + product_sale_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + shipping_address?: { + city: string; + country_code?: CountryCodeEnum | null | undefined; + firstname: string; + lastname: string; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + region?: string | null | undefined; + street: Array; + suffix?: string | null | undefined; + telephone: string; + } | null | undefined; + } | null | undefined>; + page_info?: { + current_page?: number | null | undefined; + total_pages?: number | null | undefined; + page_size?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined; +}; +export declare type CustomerProductReviewQueryVariables = Exact<{ + pageSize?: InputMaybe; + currentPage?: InputMaybe; +}>; +export declare type CustomerProductReviewQuery = { + customer?: { + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | null | undefined; +}; +export declare type DeleteCustomerAddressMutationVariables = Exact<{ + id: Scalars['Int']; +}>; +export declare type DeleteCustomerAddressMutation = { + deleteCustomerAddress?: boolean | null | undefined; +}; +export declare type GenerateCustomerTokenMutationVariables = Exact<{ + email: Scalars['String']; + password: Scalars['String']; +}>; +export declare type GenerateCustomerTokenMutation = { + generateCustomerToken?: { + token?: string | null | undefined; + } | null | undefined; +}; +export declare type CustomerAvailablePaymentMethodsQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CustomerAvailablePaymentMethodsQuery = { + customerCart: { + available_payment_methods?: Array<{ + code: string; + title: string; + } | null | undefined> | null | undefined; + }; +}; +export declare type CustomerAvailableShippingMethodsQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type CustomerAvailableShippingMethodsQuery = { + customerCart: { + shipping_addresses: Array<{ + available_shipping_methods?: Array<{ + available: boolean; + carrier_code: string; + carrier_title: string; + error_message?: string | null | undefined; + method_code?: string | null | undefined; + method_title?: string | null | undefined; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_excl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_incl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + } | null | undefined>; + }; +}; +export declare type GuestAvailablePaymentMethodsQueryVariables = Exact<{ + cartId: Scalars['String']; +}>; +export declare type GuestAvailablePaymentMethodsQuery = { + cart?: { + available_payment_methods?: Array<{ + code: string; + title: string; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type GuestAvailableShippingMethodsQueryVariables = Exact<{ + cart_id: Scalars['String']; +}>; +export declare type GuestAvailableShippingMethodsQuery = { + cart?: { + shipping_addresses: Array<{ + available_shipping_methods?: Array<{ + available: boolean; + carrier_code: string; + carrier_title: string; + error_message?: string | null | undefined; + method_code?: string | null | undefined; + method_title?: string | null | undefined; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_excl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_incl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + } | null | undefined>; + } | null | undefined; +}; +export declare type GetCustomerAddressesQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type GetCustomerAddressesQuery = { + customer?: { + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type MergeCartsMutationVariables = Exact<{ + sourceCartId: Scalars['String']; + destinationCartId: Scalars['String']; +}>; +export declare type MergeCartsMutation = { + mergeCarts: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; +}; +export declare type PlaceOrderMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type PlaceOrderMutation = { + placeOrder?: { + order: { + order_number: string; + }; + } | null | undefined; +}; +export declare type ProductDetailsQueryVariables = Exact<{ + search?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + currentPage?: InputMaybe; + sort?: InputMaybe; + configurations?: InputMaybe | Scalars['ID']>; +}>; +export declare type ProductDetailsQuery = { + products?: { + items?: Array<{ + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + items?: Array<{ + position?: number | null | undefined; + required?: boolean | null | undefined; + sku?: string | null | undefined; + title?: string | null | undefined; + type?: string | null | undefined; + uid?: string | null | undefined; + options?: Array<{ + can_change_quantity?: boolean | null | undefined; + is_default?: boolean | null | undefined; + position?: number | null | undefined; + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + configurable_product_options_selection?: { + options_available_for_selection?: Array<{ + attribute_code: string; + option_value_uids: Array; + } | null | undefined> | null | undefined; + media_gallery?: Array<{ + disabled?: boolean | null | undefined; + label?: string | null | undefined; + position?: number | null | undefined; + url?: string | null | undefined; + } | { + disabled?: boolean | null | undefined; + label?: string | null | undefined; + position?: number | null | undefined; + url?: string | null | undefined; + } | null | undefined> | null | undefined; + variant?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + downloadable_product_samples?: Array<{ + sample_url?: string | null | undefined; + title?: string | null | undefined; + } | null | undefined> | null | undefined; + downloadable_product_links?: Array<{ + id?: number | null | undefined; + price?: number | null | undefined; + title?: string | null | undefined; + uid: string; + } | null | undefined> | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + items?: Array<{ + position?: number | null | undefined; + qty?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | { + gift_message_available?: string | null | undefined; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + url_key?: string | null | undefined; + rating_summary: number; + review_count: number; + meta_description?: string | null | undefined; + meta_keyword?: string | null | undefined; + meta_title?: string | null | undefined; + options_container?: string | null | undefined; + special_to_date?: string | null | undefined; + product_links?: Array<{ + link_type?: string | null | undefined; + linked_product_sku?: string | null | undefined; + linked_product_type?: string | null | undefined; + position?: number | null | undefined; + sku?: string | null | undefined; + } | null | undefined> | null | undefined; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + small_image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + image?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + media_gallery?: Array<{ + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined> | null | undefined; + description?: { + html: string; + } | null | undefined; + short_description?: { + html: string; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type ProductReviewQueryVariables = Exact<{ + search?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + currentPage?: InputMaybe; + sort?: InputMaybe; +}>; +export declare type ProductReviewQuery = { + products?: { + items?: Array<{ + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | { + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | { + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | { + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | { + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | { + review_count: number; + reviews: { + items: Array<{ + average_rating: number; + nickname: string; + summary: string; + text: string; + created_at: string; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + product: { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + } | { + name?: string | null | undefined; + uid: string; + }; + } | null | undefined>; + page_info: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + }; + }; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type ProductReviewRatingsMetadataQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type ProductReviewRatingsMetadataQuery = { + productReviewRatingsMetadata: { + items: Array<{ + id: string; + name: string; + values: Array<{ + value_id: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; +}; +export declare type ProductsListQueryVariables = Exact<{ + search?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + currentPage?: InputMaybe; + sort?: InputMaybe; +}>; +export declare type ProductsListQuery = { + products?: { + total_count?: number | null | undefined; + aggregations?: Array<{ + attribute_code: string; + label?: string | null | undefined; + options?: Array<{ + label?: string | null | undefined; + value: string; + count?: number | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + items?: Array<{ + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + page_info?: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + } | null | undefined; + } | null | undefined; +}; +export declare type RelatedProductQueryVariables = Exact<{ + search?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + currentPage?: InputMaybe; + sort?: InputMaybe; +}>; +export declare type RelatedProductQuery = { + products?: { + items?: Array<{ + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + related_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type RemoveCouponFromCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type RemoveCouponFromCartMutation = { + removeCouponFromCart?: { + cart?: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + } | null | undefined; + } | null | undefined; +}; +export declare type RemoveItemFromCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type RemoveItemFromCartMutation = { + removeItemFromCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type RemoveProductsFromWishlistMutationVariables = Exact<{ + id: Scalars['ID']; + items: Array | Scalars['ID']; +}>; +export declare type RemoveProductsFromWishlistMutation = { + removeProductsFromWishlist?: { + wishlist: { + id?: string | null | undefined; + items_count?: number | null | undefined; + sharing_code?: string | null | undefined; + items_v2?: { + items: Array<{ + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | null | undefined>; + page_info?: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + } | null | undefined; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type RequestPasswordResetEmailMutationVariables = Exact<{ + email: Scalars['String']; + recaptchaToken?: Scalars['String']; +}>; +export declare type RequestPasswordResetEmailMutation = { + requestPasswordResetEmail?: boolean | null | undefined; +}; +export declare type ResetPasswordMutationVariables = Exact<{ + email: Scalars['String']; + newPassword: Scalars['String']; + resetPasswordToken: Scalars['String']; + recaptchaToken?: Scalars['String']; +}>; +export declare type ResetPasswordMutation = { + resetPassword?: boolean | null | undefined; +}; +export declare type RevokeCustomerTokenMutationVariables = Exact<{ + [key: string]: never; +}>; +export declare type RevokeCustomerTokenMutation = { + revokeCustomerToken?: { + result: boolean; + } | null | undefined; +}; +export declare type SetBillingAddressOnCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type SetBillingAddressOnCartMutation = { + setBillingAddressOnCart?: { + cart: { + billing_address?: { + firstname: string; + lastname: string; + company?: string | null | undefined; + street: Array; + city: string; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type SetGuestEmailOnCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type SetGuestEmailOnCartMutation = { + setGuestEmailOnCart?: { + cart: { + email?: string | null | undefined; + }; + } | null | undefined; +}; +export declare type SetPaymentMethodOnCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type SetPaymentMethodOnCartMutation = { + setPaymentMethodOnCart?: { + cart: { + available_payment_methods?: Array<{ + code: string; + title: string; + } | null | undefined> | null | undefined; + selected_payment_method?: { + code: string; + title: string; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type SetShippingAddressesOnCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type SetShippingAddressesOnCartMutation = { + setShippingAddressesOnCart?: { + cart: { + shipping_addresses: Array<{ + city: string; + company?: string | null | undefined; + firstname: string; + lastname: string; + postcode?: string | null | undefined; + street: Array; + telephone: string; + region?: { + code?: string | null | undefined; + label?: string | null | undefined; + region_id?: number | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + available_shipping_methods?: Array<{ + available: boolean; + carrier_code: string; + carrier_title: string; + error_message?: string | null | undefined; + method_code?: string | null | undefined; + method_title?: string | null | undefined; + amount: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_excl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + price_incl_tax: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + } | null | undefined>; + }; + } | null | undefined; +}; +export declare type SetShippingMethodsOnCartMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type SetShippingMethodsOnCartMutation = { + setShippingMethodsOnCart?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type StoreConfigQueryVariables = Exact<{ + [key: string]: never; +}>; +export declare type StoreConfigQuery = { + storeConfig?: { + allow_guests_to_write_product_reviews?: string | null | undefined; + allow_items?: string | null | undefined; + allow_order?: string | null | undefined; + base_currency_code?: string | null | undefined; + catalog_default_sort_by?: string | null | undefined; + category_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + cms_home_page?: string | null | undefined; + cms_no_cookies?: string | null | undefined; + cms_no_route?: string | null | undefined; + configurable_thumbnail_source?: string | null | undefined; + copyright?: string | null | undefined; + default_description?: string | null | undefined; + default_display_currency_code?: string | null | undefined; + default_keywords?: string | null | undefined; + default_title?: string | null | undefined; + grid_per_page?: number | null | undefined; + grid_per_page_values?: string | null | undefined; + head_shortcut_icon?: string | null | undefined; + header_logo_src?: string | null | undefined; + is_default_store?: boolean | null | undefined; + is_default_store_group?: boolean | null | undefined; + list_mode?: string | null | undefined; + list_per_page?: number | null | undefined; + list_per_page_values?: string | null | undefined; + locale?: string | null | undefined; + logo_alt?: string | null | undefined; + logo_height?: number | null | undefined; + logo_width?: number | null | undefined; + magento_wishlist_general_is_enabled?: string | null | undefined; + minimum_password_length?: string | null | undefined; + no_route?: string | null | undefined; + product_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + product_reviews_enabled?: string | null | undefined; + required_character_classes_number?: string | null | undefined; + root_category_uid?: string | null | undefined; + sales_fixed_product_tax_display_setting?: FixedProductTaxDisplaySettings | null | undefined; + store_code?: string | null | undefined; + store_group_code?: string | null | undefined; + store_group_name?: string | null | undefined; + store_name?: string | null | undefined; + store_sort_order?: number | null | undefined; + timezone?: string | null | undefined; + title_prefix?: string | null | undefined; + title_separator?: string | null | undefined; + title_suffix?: string | null | undefined; + use_store_in_url?: boolean | null | undefined; + website_code?: string | null | undefined; + website_name?: string | null | undefined; + weight_unit?: string | null | undefined; + welcome?: string | null | undefined; + } | null | undefined; +}; +export declare type SubscribeEmailToNewsletterMutationVariables = Exact<{ + email: Scalars['String']; +}>; +export declare type SubscribeEmailToNewsletterMutation = { + subscribeEmailToNewsletter?: { + status?: SubscriptionStatusesEnum | null | undefined; + } | null | undefined; +}; +export declare type UpdateCartItemsMutationVariables = Exact<{ + input?: InputMaybe; +}>; +export declare type UpdateCartItemsMutation = { + updateCartItems?: { + cart: { + id: string; + email?: string | null | undefined; + is_virtual: boolean; + total_quantity: number; + applied_coupons?: Array<{ + code: string; + } | null | undefined> | null | undefined; + prices?: { + subtotal_excluding_tax?: { + value?: number | null | undefined; + } | null | undefined; + subtotal_including_tax?: { + value?: number | null | undefined; + } | null | undefined; + applied_taxes?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + discounts?: Array<{ + label: string; + amount: { + value?: number | null | undefined; + }; + } | null | undefined> | null | undefined; + grand_total?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + items?: Array<{ + uid: string; + quantity: number; + bundle_options: Array<{ + uid: string; + label: string; + type: string; + values: Array<{ + id: number; + label: string; + price: number; + quantity: number; + } | null | undefined>; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + configurable_options: Array<{ + configurable_product_option_uid: string; + option_label: string; + configurable_product_option_value_uid: string; + value_label: string; + } | null | undefined>; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | { + uid: string; + quantity: number; + product: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + }; + prices?: { + row_total: { + value?: number | null | undefined; + }; + row_total_including_tax: { + value?: number | null | undefined; + }; + total_item_discount?: { + value?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + shipping_addresses: Array<{ + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + selected_shipping_method?: { + carrier_code: string; + carrier_title: string; + method_code: string; + method_title: string; + amount: { + value?: number | null | undefined; + currency?: CurrencyEnum | null | undefined; + }; + } | null | undefined; + } | null | undefined>; + billing_address?: { + firstname: string; + lastname: string; + street: Array; + city: string; + company?: string | null | undefined; + postcode?: string | null | undefined; + telephone: string; + region?: { + code?: string | null | undefined; + region_id?: number | null | undefined; + label?: string | null | undefined; + } | null | undefined; + country: { + code: string; + label: string; + }; + } | null | undefined; + }; + } | null | undefined; +}; +export declare type UpdateCustomerMutationVariables = Exact<{ + input: CustomerUpdateInput; +}>; +export declare type UpdateCustomerMutation = { + updateCustomerV2?: { + customer: { + date_of_birth?: string | null | undefined; + default_billing?: string | null | undefined; + default_shipping?: string | null | undefined; + email?: string | null | undefined; + firstname?: string | null | undefined; + is_subscribed?: boolean | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + prefix?: string | null | undefined; + suffix?: string | null | undefined; + taxvat?: string | null | undefined; + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + }; + } | null | undefined; +}; +export declare type UpdateCustomerAddressMutationVariables = Exact<{ + id: Scalars['Int']; + input?: InputMaybe; +}>; +export declare type UpdateCustomerAddressMutation = { + updateCustomerAddress?: { + id?: number | null | undefined; + city?: string | null | undefined; + company?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + fax?: string | null | undefined; + firstname?: string | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region?: string | null | undefined; + region_code?: string | null | undefined; + region_id?: number | null | undefined; + } | null | undefined; + } | null | undefined; +}; +export declare type UpdateCustomerEmailMutationVariables = Exact<{ + email: Scalars['String']; + password: Scalars['String']; + recaptchaToken?: Scalars['String']; +}>; +export declare type UpdateCustomerEmailMutation = { + updateCustomerEmail?: { + customer: { + date_of_birth?: string | null | undefined; + default_billing?: string | null | undefined; + default_shipping?: string | null | undefined; + email?: string | null | undefined; + firstname?: string | null | undefined; + is_subscribed?: boolean | null | undefined; + lastname?: string | null | undefined; + middlename?: string | null | undefined; + prefix?: string | null | undefined; + suffix?: string | null | undefined; + taxvat?: string | null | undefined; + addresses?: Array<{ + city?: string | null | undefined; + country_code?: CountryCodeEnum | null | undefined; + default_billing?: boolean | null | undefined; + default_shipping?: boolean | null | undefined; + firstname?: string | null | undefined; + id?: number | null | undefined; + lastname?: string | null | undefined; + postcode?: string | null | undefined; + prefix?: string | null | undefined; + street?: Array | null | undefined; + suffix?: string | null | undefined; + telephone?: string | null | undefined; + vat_id?: string | null | undefined; + extension_attributes?: Array<{ + attribute_code?: string | null | undefined; + value?: string | null | undefined; + } | null | undefined> | null | undefined; + region?: { + region_code?: string | null | undefined; + region_id?: number | null | undefined; + region?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + }; + } | null | undefined; +}; +export declare type UpsellProductsQueryVariables = Exact<{ + search?: InputMaybe; + filter?: InputMaybe; + pageSize?: InputMaybe; + currentPage?: InputMaybe; + sort?: InputMaybe; +}>; +export declare type UpsellProductsQuery = { + products?: { + items?: Array<{ + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | { + uid: string; + upsell_products?: Array<{ + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; +}; +export declare type UrlResolverQueryVariables = Exact<{ + url: Scalars['String']; +}>; +export declare type UrlResolverQuery = { + urlResolver?: { + id?: number | null | undefined; + redirectCode?: number | null | undefined; + relative_url?: string | null | undefined; + type?: UrlRewriteEntityTypeEnum | null | undefined; + entity_uid?: string | null | undefined; + } | null | undefined; +}; +export declare type WishlistQueryVariables = Exact<{ + currentPage?: InputMaybe; + pageSize?: InputMaybe; +}>; +export declare type WishlistQuery = { + customer?: { + wishlists: Array<{ + id?: string | null | undefined; + items_count?: number | null | undefined; + sharing_code?: string | null | undefined; + items_v2?: { + items: Array<{ + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | { + id: string; + quantity: number; + description?: string | null | undefined; + added_at: string; + product?: { + __typename: 'BundleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + items?: Array<{ + sku?: string | null | undefined; + title?: string | null | undefined; + options?: Array<{ + uid: string; + quantity?: number | null | undefined; + product?: { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | { + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'ConfigurableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + configurable_options?: Array<{ + attribute_code?: string | null | undefined; + attribute_uid: string; + label?: string | null | undefined; + position?: number | null | undefined; + uid: string; + use_default?: boolean | null | undefined; + values?: Array<{ + label?: string | null | undefined; + uid?: string | null | undefined; + swatch_data?: { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | { + value?: string | null | undefined; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'DownloadableProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'GroupedProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'SimpleProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | { + __typename: 'VirtualProduct'; + uid: string; + sku?: string | null | undefined; + name?: string | null | undefined; + stock_status?: ProductStockStatus | null | undefined; + only_x_left_in_stock?: number | null | undefined; + rating_summary: number; + url_key?: string | null | undefined; + review_count: number; + categories?: Array<{ + uid: string; + name?: string | null | undefined; + url_suffix?: string | null | undefined; + url_path?: string | null | undefined; + breadcrumbs?: Array<{ + category_name?: string | null | undefined; + category_url_path?: string | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined> | null | undefined; + price_range: { + maximum_price?: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + } | null | undefined; + minimum_price: { + final_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + regular_price: { + currency?: CurrencyEnum | null | undefined; + value?: number | null | undefined; + }; + }; + }; + thumbnail?: { + url?: string | null | undefined; + position?: number | null | undefined; + disabled?: boolean | null | undefined; + label?: string | null | undefined; + } | null | undefined; + url_rewrites?: Array<{ + url?: string | null | undefined; + } | null | undefined> | null | undefined; + reviews: { + items: Array<{ + average_rating: number; + ratings_breakdown: Array<{ + name: string; + value: string; + } | null | undefined>; + } | null | undefined>; + }; + } | null | undefined; + } | null | undefined>; + page_info?: { + current_page?: number | null | undefined; + page_size?: number | null | undefined; + total_pages?: number | null | undefined; + } | null | undefined; + } | null | undefined; + } | null | undefined>; + } | null | undefined; +}; +// # sourceMappingURL=GraphQL.d.ts.map diff --git a/modules/catalog/category/components/CategoryEmptyResults.vue b/modules/catalog/category/components/CategoryEmptyResults.vue new file mode 100644 index 0000000..0475e6e --- /dev/null +++ b/modules/catalog/category/components/CategoryEmptyResults.vue @@ -0,0 +1,37 @@ + + + diff --git a/modules/catalog/category/components/__tests__/CategoryEmptyResults.spec.ts b/modules/catalog/category/components/__tests__/CategoryEmptyResults.spec.ts new file mode 100644 index 0000000..3e9bdfd --- /dev/null +++ b/modules/catalog/category/components/__tests__/CategoryEmptyResults.spec.ts @@ -0,0 +1,23 @@ +import { render } from '~/tests/unit/test-utils'; +import CategoryEmptyResults from '../CategoryEmptyResults.vue'; + +describe('CategoryEmptyResults.vue', () => { + it('Renders with a default value', () => { + const { getByRole, queryByText } = render(CategoryEmptyResults); + + const svgImage = getByRole('img'); + const paragraph = queryByText('We can\'t find products matching the selection.'); + + expect(svgImage).toBeDefined(); + expect(paragraph).toBeDefined(); + }); + + it('Renders content from the "default" slot', () => { + const wrapper = render(CategoryEmptyResults, { + slots: { + default: '
', + }, + }); + expect(wrapper.html()).toContain('
'); + }); +}); diff --git a/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue b/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue new file mode 100644 index 0000000..f483508 --- /dev/null +++ b/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue @@ -0,0 +1,54 @@ + + + + diff --git a/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts b/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts new file mode 100644 index 0000000..f45cd4c --- /dev/null +++ b/modules/catalog/category/components/breadcrumbs/__tests__/CategoryBreadcrumbs.spec.ts @@ -0,0 +1,67 @@ +import { mount } from '@vue/test-utils'; +import * as composables from '@nuxtjs/composition-api'; +import { + categoryAncestorsFirstLevelMock, + categoryAncestorsSecondLevelMock, + categoryAncestorsThirdLevelMock, + useTraverseCategoryMock, +} from '~/tests/unit/mocks/useTraverseCategoryMock'; +import { useUiHelpers } from '~/composables'; +import { useTraverseCategory } from '~/modules/catalog/category/helpers/useTraverseCategory'; +import CategoryBreadcrumbs from '~/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue'; +import type { CategoryTree } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const originalComposables = jest.requireActual('@nuxtjs/composition-api'); + return { + ...originalComposables, + useContext: jest.fn(), + }; +}); +jest.mock('~/composables'); +jest.mock('~/modules/catalog/category/helpers/useTraverseCategory'); + +(composables.useContext as jest.Mock).mockReturnValue({ + localePath: jest.fn((path: string) => path), +}); +(useUiHelpers as jest.Mock).mockReturnValue({ + getCatLink: jest.fn( + (category: CategoryTree): string => `/${category.url_path}${category.url_suffix || ''}`, + ), +}); + +describe('CategoryBreadcrumbs.vue', () => { + it('Breadcrumbs should not render if there is only a first level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsFirstLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper).toBeDefined(); + expect(wrapper.find('li').exists()).toBeFalsy(); + }); + + it('Breadcrumbs must have one item for the second level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsSecondLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper.findAll('li')).toHaveLength(1); + }); + + it('Breadcrumbs must have two item for the third level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsThirdLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper.findAll('li')).toHaveLength(2); + }); + + it('Breadcrumb must have link that should have href attribute', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsSecondLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + const link = wrapper.find('a'); + expect(link).toBeDefined(); + expect(link.attributes('href')).toBeDefined(); + }); + + it('The last breadcrumb must have \'current\' class', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsThirdLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + const links = wrapper.findAll('a'); + expect(links.at(-1).classes()).toContain('current'); + }); +}); diff --git a/modules/catalog/category/components/cms/CmsContent.scss b/modules/catalog/category/components/cms/CmsContent.scss new file mode 100644 index 0000000..e49bbe6 --- /dev/null +++ b/modules/catalog/category/components/cms/CmsContent.scss @@ -0,0 +1,234 @@ +::v-deep { + $magento-specific-image-gray: #f4f4f4; + $magento-specific-image-yellow: #ffdd17; + + @mixin for-luma-mobile { + @media (max-width: 767px) { + @content; + } + } + + @mixin promo-columns($number_of_columns) { + display: grid; + gap: var(--spacer-sm); + grid-template-columns: repeat($number_of_columns, calc((100% - ( $number_of_columns - 1 ) * var(--spacer-sm)) / $number_of_columns)); + + @include for-luma-mobile { + grid-template-columns: 1fr; + grid-template-rows: repeat($number_of_columns, auto); + } + } + + .block-promo-2columns { + @include promo-columns(2) + } + + .block-promo-3columns { + @include promo-columns(3) + } + + .more.icon { + &::after { + content: '\203a'; + margin-left: var(--spacer-xs) + } + } + + img { + height: auto; + border: 0; + } + + .block-promo { + display: inline-grid; + margin-bottom: var(--spacer-sm); + overflow: hidden; + + .content { + padding: var(--spacer-base); + } + } + + .content { + display: flex; + flex-direction: column; + gap: var(--spacer-xs); + font-family: var(--font-family--secondary); + color: var(--c-text); + } + + .title { + font-size: var(--h2-font-size); + font-weight: var(--font-family--semibold); + } + + .info { + font-weight: var(--font-weight--light) + } + + .more.button { + background-color: var(--c-primary); + color: var(--c-white); + + max-width: max-content; + padding: var(--spacer-sm) var(--spacer-base); + + font-weight: var(--font-weight-semibold); + font-family: var(--font-family--secondary); + text-align: center; + text-transform: uppercase; + } + + .womens-erin { + background-color: $magento-specific-image-gray; + display: flex; + justify-content: space-between; + flex-wrap: wrap; + + img { + height: 100%; + width: auto; + } + + .more.icon { + margin-top: var(--spacer-base); + } + } + + .womens-main, .home-main, .mens-main, .new-main, .sale-main, .gear-main { + width: 100%; + position: relative; + + .content { + position: absolute; + top: var(--spacer-xl); + right: var(--spacer-xl); + background-color: var(--c-white); + width: 40%; + display: flex; + gap: var(--spacer-base); + + @include for-luma-mobile { + top: unset; + right: unset; + bottom: var(--spacer-base); + left: 50%; + transform: translate(-50%, 0); + align-items: center; + text-align: center; + } + } + + img { + height: auto; + width: 100%; + + @include for-luma-mobile { + height: 100%; + width: auto; + } + } + } + + .womens-pants, .mens-pants { + position: relative; + margin-left: auto; /* ugly hack but the "-pants" images aspect ratios don't allow for evenly lining up cms blocks */ + + @include for-luma-mobile { + margin-left: initial; + } + + .content { + $space: var(--spacer-sm); + position: absolute; + left: $space; + top: $space; + background-color: $magento-specific-image-gray; + opacity: 0.9; + width: 35%; + + display: flex; + flex-direction: column; + gap: var(--spacer-base); + + @include for-luma-mobile { + gap: 0; + width: 45%; + } + } + + img { + height: 100%; + width: auto; + + @include for-luma-mobile { + height: auto; + width: 100%; + } + } + } + + .womens-t-shirts, .mens-t-shirts { + background-color: $magento-specific-image-yellow; + + .content { + display: flex; + flex-direction: column; + gap: var(--spacer-sm) + } + + img { + width: min(100%, 440px); + } + } + + .content { + font-family: var(--font-family--secondary); + color: var(--c-text); + } + + .block-promo .content { + padding: var(--spacer-base); + } + + .womens-category-pants, + .womens-category-tanks, + .womens-category-shorts, + .mens-category-tees, + .mens-category-hoodies, + .mens-category-shorts, + .gear-category-bags, + .gear-category-equipment, + .gear-category-watches { + background-color: $magento-specific-image-gray; + display: flex; + justify-content: space-between; + height: 210px; + position: relative; + overflow: hidden; + + img { + position: absolute; + left: 60%; + } + + .content { + position: relative; + display: flex; + flex-direction: column; + padding: var(--spacer-sm); + padding-right: 0; + width: 55%; + } + + .title { + font-size: var(--h4-font-size); + margin-bottom: var(--spacer-xs); + } + + .more.icon { + position: absolute; + bottom: var(--spacer-base); + } + } +} diff --git a/modules/catalog/category/components/cms/CmsContent.vue b/modules/catalog/category/components/cms/CmsContent.vue new file mode 100644 index 0000000..ead86e4 --- /dev/null +++ b/modules/catalog/category/components/cms/CmsContent.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/modules/catalog/category/components/cms/__tests__/CmsContent.spec.ts b/modules/catalog/category/components/cms/__tests__/CmsContent.spec.ts new file mode 100644 index 0000000..dc49b74 --- /dev/null +++ b/modules/catalog/category/components/cms/__tests__/CmsContent.spec.ts @@ -0,0 +1,6 @@ +import { cmsContentTest } from '~/tests/unit/cmsContent.spec'; +import CmsContent from '~/modules/catalog/category/components/cms/CmsContent.vue'; + +describe('CmsContent.vue', () => { + cmsContentTest(CmsContent); +}); diff --git a/modules/catalog/category/components/cms/categoryContent.gql.ts b/modules/catalog/category/components/cms/categoryContent.gql.ts new file mode 100644 index 0000000..dce23a8 --- /dev/null +++ b/modules/catalog/category/components/cms/categoryContent.gql.ts @@ -0,0 +1,13 @@ +export default ` + query getCategoryContentData($filters: CategoryFilterInput) { + categoryList(filters: $filters) { + uid + display_mode + landing_page + cms_block { + identifier + content + } + } + } +`; diff --git a/modules/catalog/category/components/cms/useCategoryContent.ts b/modules/catalog/category/components/cms/useCategoryContent.ts new file mode 100644 index 0000000..ebf2634 --- /dev/null +++ b/modules/catalog/category/components/cms/useCategoryContent.ts @@ -0,0 +1,46 @@ +import { useApi } from '~/composables/useApi'; +import displayModesEnum from '~/modules/catalog/category/enums/displayModesEnum'; +import categoryContentQuery from './categoryContent.gql'; +import { CategoryTree } from '~/modules/GraphQL/types'; + +export interface CmsBlockInterface { + /** CMS block content */ + content?: string; + /** CMS block identifier */ + identifier?: string; + /** CMS block title */ + title?: string; +} + +interface CmsContentInterface { + cmsBlock: CmsBlockInterface + displayMode: string + isShowCms: boolean + isShowProducts: boolean +} + +export const useCategoryContent = () => { + const { query } = useApi(); + + const getContentData = async (uid: string): Promise => { + const { data } = await query<{ categoryList: CategoryTree }>(categoryContentQuery, { filters: { category_uid: { eq: uid } } }); + const category = data?.categoryList[0] ?? {}; + const cmsBlock = category?.cms_block ?? { cmsBlock: { content: '' } }; + const displayMode = category?.display_mode ?? displayModesEnum.PRODUCTS; + const isShowCms = displayMode === displayModesEnum.PAGE || displayMode === displayModesEnum.PRODUCTS_AND_PAGE; + const isShowProducts = displayMode === displayModesEnum.PRODUCTS || displayMode === displayModesEnum.PRODUCTS_AND_PAGE; + + return { + cmsBlock, + displayMode, + isShowCms, + isShowProducts, + }; + }; + + return { + getContentData, + }; +}; + +export default useCategoryContent; diff --git a/modules/catalog/category/components/filters/CategoryFilters.scss b/modules/catalog/category/components/filters/CategoryFilters.scss new file mode 100644 index 0000000..fefb377 --- /dev/null +++ b/modules/catalog/category/components/filters/CategoryFilters.scss @@ -0,0 +1,72 @@ +.filters { + position: relative; + ::v-deep &__title { + --heading-title-font-size: var(--font-size--xl); + margin: var(--spacer-xl) 0 var(--spacer-base) 0; + + &:first-child { + margin: var(--spacer-base) 0 var(--spacer-xs) 0; + } + } + + &__chosen { + color: var(--c-text-muted); + font-weight: var(--font-weight--normal); + font-family: var(--font-family--secondary); + position: absolute; + right: var(--spacer-xl); + } + + &__item { + --radio-container-padding: 0 var(--spacer-sm) 0 var(--spacer-xl); + --radio-background: transparent; + --filter-label-color: var(--c-secondary-variant); + --filter-count-color: var(--c-secondary-variant); + --checkbox-padding: 0 var(--spacer-sm) 0 var(--spacer-xl); + padding: var(--spacer-sm) 0; + border-bottom: 1px solid var(--c-light); + + &:last-child { + border-bottom: 0; + } + + @include for-desktop { + --checkbox-padding: 0; + margin: var(--spacer-sm) 0; + border: 0; + padding: 0; + } + } + + &__accordion-item { + --accordion-item-content-padding: var(--spacer-sm); + position: relative; + left: 50%; + right: 50%; + margin-left: -50vw; + margin-right: -50vw; + width: 100vw; + } + + &__buttons { + margin: var(--spacer-sm) 0; + @include for-desktop { + background-color: #fff; + position: sticky; + bottom: 0; + } + } + + &__button-clear { + --button-background: var(--c-light); + --button-color: var(--c-dark-variant); + margin: var(--spacer-xs) 0 0 0; + } +} +.heading__title { + border: 1px solid var(--c-light); + border-width: 1px 0 0 0; + padding: var(--spacer-xs) 0; + font-weight: normal; + margin-bottom: var(--spacer-sm); +} diff --git a/modules/catalog/category/components/filters/CategoryFilters.vue b/modules/catalog/category/components/filters/CategoryFilters.vue new file mode 100644 index 0000000..275caaf --- /dev/null +++ b/modules/catalog/category/components/filters/CategoryFilters.vue @@ -0,0 +1,244 @@ + + + + diff --git a/modules/catalog/category/components/filters/FiltersSidebar/SelectedFilters.vue b/modules/catalog/category/components/filters/FiltersSidebar/SelectedFilters.vue new file mode 100644 index 0000000..1468372 --- /dev/null +++ b/modules/catalog/category/components/filters/FiltersSidebar/SelectedFilters.vue @@ -0,0 +1,92 @@ + + + diff --git a/modules/catalog/category/components/filters/FiltersSidebar/__tests__/SelectedFilters.spec.ts b/modules/catalog/category/components/filters/FiltersSidebar/__tests__/SelectedFilters.spec.ts new file mode 100644 index 0000000..19f0f22 --- /dev/null +++ b/modules/catalog/category/components/filters/FiltersSidebar/__tests__/SelectedFilters.spec.ts @@ -0,0 +1,68 @@ +import userEvent from '@testing-library/user-event'; +import { useContext } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { RemovableFilter, removableFiltersData } from '~/tests/unit/mocks/removableFiltersMock'; +import SelectedFilters from '~/modules/catalog/category/components/filters/FiltersSidebar/SelectedFilters.vue'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + useContext: jest.fn(), + }; +}); + +(useContext as jest.Mock).mockReturnValue({ + app: { + i18n: { + t: jest.fn((text: string): string => text), + }, + }, +}); + +describe('SelectedFilters.vue', () => { + it('Should not have children if the component has no data', () => { + const { queryByTestId } = render(SelectedFilters); + + expect(queryByTestId('selected-filter')).toBeNull(); + }); + + it('Should render selected filters if options are exist', () => { + const { getAllByTestId } = render(SelectedFilters, { + props: { + removableFilters: removableFiltersData as RemovableFilter[], + }, + }); + const selectedFilers = getAllByTestId('selected-filter'); + + expect(selectedFilers).toHaveLength(removableFiltersData.length); + }); + + it('Yes/No option should render right label', () => { + const { getByText } = render(SelectedFilters, { + props: { + removableFilters: [removableFiltersData[0]] as RemovableFilter[], + }, + }); + const filterLabel = `${removableFiltersData[0].name}: ${removableFiltersData[0].label === '1' ? 'Yes' : 'No'}`; + const yesNoFilter = getByText(filterLabel); + + expect(yesNoFilter).toBeDefined(); + }); + + it('Should have a remove button and the button should be clickable', async () => { + const { getByTestId, emitted } = render(SelectedFilters, { + props: { + removableFilters: [removableFiltersData[0]] as RemovableFilter[], + }, + }); + const removeButton = getByTestId('selected-filter-remove'); + + expect(removeButton).toBeDefined(); + + await userEvent.click(removeButton); + + expect(emitted().removeFilter).toHaveLength(1); + }); +}); diff --git a/modules/catalog/category/components/filters/__tests__/CategoryFilters.spec.ts b/modules/catalog/category/components/filters/__tests__/CategoryFilters.spec.ts new file mode 100644 index 0000000..e3ddda5 --- /dev/null +++ b/modules/catalog/category/components/filters/__tests__/CategoryFilters.spec.ts @@ -0,0 +1,125 @@ +import userEvent from '@testing-library/user-event'; +import { inject, ref, useContext } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import CategoryFilters from '../CategoryFilters.vue'; +import { useUiHelpers } from '~/composables'; +import { Aggregation } from '~/modules/GraphQL/types'; +import { categoryFiltersData } from '~/tests/unit/mocks/categoryFiltersMock'; +import { useUiHelpersMock } from '~/tests/unit/mocks/useUiHelpersMock'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + useContext: jest.fn(), + }; +}); +jest.mock('~/composables'); +jest.mock('~/composables/useApi', () => ({ + useApi: jest.fn().mockReturnValue({ + query: jest.fn(() => ({ data: {}, errors: [] })), + }), +})); + +(useContext as jest.Mock).mockReturnValue({ + app: { + i18n: { + t: jest.fn((text: string): string => text), + }, + }, +}); + +(inject as jest.Mock).mockReturnValue({ + isFilterSelected: jest.fn( + (id: string, optVal: string): boolean => id === optVal, + ), +}); + +(useUiHelpers as jest.Mock).mockReturnValue(useUiHelpersMock()); + +describe('CategoryFilters', () => { + it('Should render Skeleton when isLoading is true', () => { + const { queryByTestId } = render(CategoryFilters, { + props: { + catUid: '1', + }, + setup() { + return { + isLoading: ref(true), + }; + }, + }); + + expect(queryByTestId('skeleton-loader')).not.toBeNull(); + }); + + it('CategoryFilters Mobile sidebar should be hidden if isVisible false', () => { + const { queryByTestId } = render(CategoryFilters, { + props: { + catUid: '1', + isVisible: false, + }, + }); + + expect(queryByTestId('mobile-sidebar').children).toHaveLength(0); + }); + + it('Should render filters if these are exist', () => { + const { getAllByTestId } = render(CategoryFilters, { + props: { + catUid: '1', + isVisible: false, + }, + setup() { + return { + isLoading: ref(false), + filters: ref(categoryFiltersData as Aggregation[]), + }; + }, + }); + const filters = getAllByTestId('category-filter'); + + expect(filters).toHaveLength(categoryFiltersData.length); + }); + + it('CategoryFilters Mobile sidebar should be visible if isVisible true', () => { + const { queryByTestId } = render(CategoryFilters, { + props: { + catUid: '1', + isVisible: true, + }, + }); + + expect(queryByTestId('mobile-sidebar').children).not.toHaveLength(0); + }); + + it('"Apply filters" and "Clear all" buttons should be clickable', async () => { + const doApplyFilters = jest.fn(); + const doClearFilters = jest.fn(); + const { getByTestId } = render(CategoryFilters, { + props: { + catUid: '1', + isVisible: false, + }, + setup() { + return { + isLoading: ref(false), + filters: ref(categoryFiltersData as Aggregation[]), + doApplyFilters, + doClearFilters, + }; + }, + }); + const applyFiltersButton = getByTestId('apply-filters'); + const clearFiltersButton = getByTestId('clear-filters'); + + await userEvent.click(applyFiltersButton); + + expect(doApplyFilters).toHaveBeenCalledTimes(1); + + await userEvent.click(clearFiltersButton); + + expect(doClearFilters).toHaveBeenCalledTimes(1); + }); +}); diff --git a/modules/catalog/category/components/filters/__tests__/useFilters.spec.ts b/modules/catalog/category/components/filters/__tests__/useFilters.spec.ts new file mode 100644 index 0000000..591c4d2 --- /dev/null +++ b/modules/catalog/category/components/filters/__tests__/useFilters.spec.ts @@ -0,0 +1,31 @@ +import { useFilters } from '~/modules/catalog/category/components/filters/useFilters'; +import { useUiHelpers } from '~/composables'; + +jest.mock('~/composables', () => { + const originalModule = jest.requireActual('~/composables'); + + return { + ...originalModule, + useUiHelpers: jest.fn(), + }; +}); + +jest.mock('~/modules/catalog/category/config/FiltersConfig'); + +describe('useFilter', () => { + it('getSelectedFiltersFromUrl returns empty data if no filter is selected', () => { + (useUiHelpers as jest.Mock).mockReturnValue({ getFacetsFromURL: jest.fn(() => ({ filters: {} })) }); + const { getSelectedFiltersFromUrl } = useFilters(); + expect(getSelectedFiltersFromUrl()).toMatchObject({}); + }); + + it('getSelectedFiltersFromUrl returns selected filters from url data', () => { + (useUiHelpers as jest.Mock).mockReturnValue({ getFacetsFromURL: jest.fn(() => ({ filters: { color: ['50'] } })) }); + const { getSelectedFiltersFromUrl } = useFilters(); + expect(getSelectedFiltersFromUrl()).toMatchObject({ color: ['50'] }); + }); + + it.todo('isFilterSelected returns true if filter is selected'); + it.todo('isFilterSelected returns false if filter is NOT selected'); + it.todo('selectFilter adds filter to the selected filters pool'); +}); diff --git a/modules/catalog/category/components/filters/command/getProductFilterByCategory.gql.ts b/modules/catalog/category/components/filters/command/getProductFilterByCategory.gql.ts new file mode 100644 index 0000000..c0cedc9 --- /dev/null +++ b/modules/catalog/category/components/filters/command/getProductFilterByCategory.gql.ts @@ -0,0 +1,20 @@ +export default ` + query getProductFiltersByCategory($categoryIdFilter: FilterEqualTypeInput!) { + products(filter: { category_uid: $categoryIdFilter }) { + aggregations { + label + count + attribute_code + options { + count + label + value + __typename + } + position + __typename + } + __typename + } + } +`; diff --git a/modules/catalog/category/components/filters/command/getProductFilterByCategoryCommand.ts b/modules/catalog/category/components/filters/command/getProductFilterByCategoryCommand.ts new file mode 100644 index 0000000..6b3ca3a --- /dev/null +++ b/modules/catalog/category/components/filters/command/getProductFilterByCategoryCommand.ts @@ -0,0 +1,14 @@ +import { useApi } from '~/composables/useApi'; +import { Aggregation, FilterEqualTypeInput, Products } from '~/modules/GraphQL/types'; +import GetProductFilterByCategoryQuery from '~/modules/catalog/category/components/filters/command/getProductFilterByCategory.gql'; + +export const getProductFilterByCategoryCommand = { + execute: async (categoryIdFilter: FilterEqualTypeInput): Promise => { + const { query } = useApi(); + const { data } = await query<{ products: Products }>(GetProductFilterByCategoryQuery, { categoryIdFilter }); + + return data?.products?.aggregations ?? []; + }, +}; + +export default getProductFilterByCategoryCommand; diff --git a/modules/catalog/category/components/filters/renderer/CheckboxType.vue b/modules/catalog/category/components/filters/renderer/CheckboxType.vue new file mode 100644 index 0000000..ff75868 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/CheckboxType.vue @@ -0,0 +1,61 @@ + + diff --git a/modules/catalog/category/components/filters/renderer/RadioType.vue b/modules/catalog/category/components/filters/renderer/RadioType.vue new file mode 100644 index 0000000..44149cf --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/RadioType.vue @@ -0,0 +1,78 @@ + + + diff --git a/modules/catalog/category/components/filters/renderer/RendererTypesEnum.ts b/modules/catalog/category/components/filters/renderer/RendererTypesEnum.ts new file mode 100644 index 0000000..eeee193 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/RendererTypesEnum.ts @@ -0,0 +1,9 @@ +enum RendererTypesEnum { + RADIO = 'RadioType', + CHECKBOX = 'CheckboxType', + SWATCH_COLOR = 'SwatchColorType', + YES_NO = 'YesNoType', + DEFAULT = 'CheckboxType', +} + +export default RendererTypesEnum; diff --git a/modules/catalog/category/components/filters/renderer/SwatchColorType.vue b/modules/catalog/category/components/filters/renderer/SwatchColorType.vue new file mode 100644 index 0000000..6c0ec34 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/SwatchColorType.vue @@ -0,0 +1,62 @@ + + + diff --git a/modules/catalog/category/components/filters/renderer/YesNoType.vue b/modules/catalog/category/components/filters/renderer/YesNoType.vue new file mode 100644 index 0000000..fde8d7b --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/YesNoType.vue @@ -0,0 +1,58 @@ + + + diff --git a/modules/catalog/category/components/filters/renderer/__tests__/CheckboxType.spec.ts b/modules/catalog/category/components/filters/renderer/__tests__/CheckboxType.spec.ts new file mode 100644 index 0000000..5098230 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/__tests__/CheckboxType.spec.ts @@ -0,0 +1,72 @@ +import userEvent from '@testing-library/user-event'; +import { inject } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { categoryFiltersData, categoryFiltersDataWithOneOption } from '~/tests/unit/mocks/categoryFiltersMock'; +import { injectMock } from '~/tests/unit/mocks/injectMock'; +import CheckboxType from '~/modules/catalog/category/components/filters/renderer/CheckboxType.vue'; +import type { Aggregation } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + }; +}); + +(inject as jest.Mock).mockReturnValue(injectMock()); + +describe('CheckboxType.vue', () => { + it('Should show filters if options are exist', () => { + const { getAllByTestId } = render(CheckboxType, { props: { filter: categoryFiltersData[0] as Aggregation } }); + const filters = getAllByTestId('category-filter'); + + expect(filters).toHaveLength(categoryFiltersData[0].options.length); + }); + + it('Default filter should not be active', () => { + const { getByTestId } = render(CheckboxType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).not.toContain('is-active'); + }); + + it('The filter should have a label should be clickable', async () => { + const { getByLabelText, emitted } = render(CheckboxType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const labelText = `${categoryFiltersDataWithOneOption.options[0].label}`; + const filterLabel = getByLabelText(labelText); + + await userEvent.click(filterLabel); + + expect(emitted().selectFilter).toHaveLength(1); + }); + + it('The selected filter should be active', () => { + (inject as jest.Mock).mockReturnValue(Object.assign( + injectMock(), + { + isFilterSelected: jest.fn( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (id: string, optVal: string): boolean => true, + ), + }, + )); + + const { getByTestId } = render(CheckboxType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).toContain('is-active'); + }); +}); diff --git a/modules/catalog/category/components/filters/renderer/__tests__/RadioType.spec.ts b/modules/catalog/category/components/filters/renderer/__tests__/RadioType.spec.ts new file mode 100644 index 0000000..9468bbc --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/__tests__/RadioType.spec.ts @@ -0,0 +1,77 @@ +import userEvent from '@testing-library/user-event'; +import { inject } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { categoryFiltersData, categoryFiltersDataWithOneOption } from '~/tests/unit/mocks/categoryFiltersMock'; +import { injectMock } from '~/tests/unit/mocks/injectMock'; +import RadioType from '~/modules/catalog/category/components/filters/renderer/RadioType.vue'; +import type { Aggregation } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + }; +}); + +(inject as jest.Mock).mockReturnValue({ + isFilterSelected: jest.fn( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (id: string, optVal: string): string => id, + ), +}); + +describe('RadioType.vue', () => { + it('Should show filters if options are exist', () => { + const { getAllByTestId } = render(RadioType, { props: { filter: categoryFiltersData[0] as Aggregation } }); + const filters = getAllByTestId('category-filter'); + + expect(filters).toHaveLength(categoryFiltersData[0].options.length); + }); + + it('Default filter should not be active', () => { + const { getByTestId } = render(RadioType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).not.toContain('is-active'); + }); + + it('The filter should have a label should be clickable', async () => { + const { getByLabelText, emitted } = render(RadioType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const labelText = `${categoryFiltersDataWithOneOption.options[0].label}`; + const filterLabel = getByLabelText(labelText); + + await userEvent.click(filterLabel); + + expect(emitted().selectFilter).toHaveLength(1); + }); + + it('The selected filter should be active', () => { + (inject as jest.Mock).mockReturnValue(Object.assign( + injectMock(), + { + isFilterSelected: jest.fn( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (id: string, optVal: string): string => optVal, + ), + }, + )); + + const { getByTestId } = render(RadioType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).toContain('is-active'); + }); +}); diff --git a/modules/catalog/category/components/filters/renderer/__tests__/SwatchColorType.spec.ts b/modules/catalog/category/components/filters/renderer/__tests__/SwatchColorType.spec.ts new file mode 100644 index 0000000..335fe74 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/__tests__/SwatchColorType.spec.ts @@ -0,0 +1,71 @@ +import userEvent from '@testing-library/user-event'; +import { inject } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { categoryFiltersData, categoryFiltersDataWithOneOption } from '~/tests/unit/mocks/categoryFiltersMock'; +import { injectMock } from '~/tests/unit/mocks/injectMock'; +import SwatchColorType from '~/modules/catalog/category/components/filters/renderer/SwatchColorType.vue'; +import type { Aggregation } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + }; +}); + +(inject as jest.Mock).mockReturnValue(injectMock()); + +describe('SwatchColorType.vue', () => { + it('Should show filters if options are exist', () => { + const { getAllByRole } = render(SwatchColorType, { props: { filter: categoryFiltersData[0] as Aggregation } }); + const filters = getAllByRole('button'); + + expect(filters).toHaveLength(categoryFiltersData[0].options.length); + }); + + it('Default filter should not be active', () => { + const { getByRole } = render(SwatchColorType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByRole('button'); + + expect(filter.classList).not.toContain('is-active'); + }); + + it('The filter should be clickable', async () => { + const { getByRole, emitted } = render(SwatchColorType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByRole('button'); + + await userEvent.click(filter); + + expect(emitted().selectFilter).toHaveLength(1); + }); + + it('The selected filter should be active', () => { + (inject as jest.Mock).mockReturnValue(Object.assign( + injectMock(), + { + isFilterSelected: jest.fn( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (id: string, optVal: string): boolean => true, + ), + }, + )); + + const { getByRole } = render(SwatchColorType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByRole('button'); + + expect(filter.classList).toContain('is-active'); + }); +}); diff --git a/modules/catalog/category/components/filters/renderer/__tests__/YesNoType.spec.ts b/modules/catalog/category/components/filters/renderer/__tests__/YesNoType.spec.ts new file mode 100644 index 0000000..e04f076 --- /dev/null +++ b/modules/catalog/category/components/filters/renderer/__tests__/YesNoType.spec.ts @@ -0,0 +1,84 @@ +import userEvent from '@testing-library/user-event'; +import { inject, useContext } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { categoryFiltersData, categoryFiltersDataWithOneOption } from '~/tests/unit/mocks/categoryFiltersMock'; +import { injectMock } from '~/tests/unit/mocks/injectMock'; +import YesNoType from '~/modules/catalog/category/components/filters/renderer/YesNoType.vue'; +import type { Aggregation } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + inject: jest.fn(), + useContext: jest.fn(), + }; +}); + +(inject as jest.Mock).mockReturnValue({ + isFilterSelected: jest.fn( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (id: string, optVal: string): string => id, + ), +}); +(useContext as jest.Mock).mockReturnValue({ + app: { + i18n: { + t: jest.fn((text: string): string => text), + }, + }, +}); + +describe('YesNoType.vue', () => { + it('Should show filters if options are exist', () => { + const { getAllByTestId } = render(YesNoType, { props: { filter: categoryFiltersData[0] as Aggregation } }); + const filters = getAllByTestId('category-filter'); + + expect(filters).toHaveLength(categoryFiltersData[0].options.length); + }); + + it('Default filter should not be active', () => { + const { getByTestId } = render(YesNoType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).not.toContain('is-active'); + }); + + it('The filter should have a label should be clickable', async () => { + const { getByLabelText, emitted } = render(YesNoType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const labelText = 'No'; + const filterLabel = getByLabelText(labelText); + + await userEvent.click(filterLabel); + + expect(emitted().selectFilter).toHaveLength(1); + }); + + it('The selected filter should be active', () => { + (inject as jest.Mock).mockReturnValue(Object.assign( + injectMock(), + { + isFilterSelected: jest.fn( + (id: string, optVal: string): string => optVal, + ), + }, + )); + + const { getByTestId } = render(YesNoType, { + props: { + filter: categoryFiltersDataWithOneOption as Aggregation, + }, + }); + const filter = getByTestId('category-filter'); + + expect(filter.classList).toContain('is-active'); + }); +}); diff --git a/modules/catalog/category/components/filters/useFilters.ts b/modules/catalog/category/components/filters/useFilters.ts new file mode 100644 index 0000000..c628e02 --- /dev/null +++ b/modules/catalog/category/components/filters/useFilters.ts @@ -0,0 +1,96 @@ +import { + ref, set, +} from '@nuxtjs/composition-api'; +import { useUiHelpers } from '~/composables'; +import { getFilterConfig } from '~/modules/catalog/category/config/FiltersConfig'; +import { FilterTypeEnum } from '~/modules/catalog/category/config/config'; +import type { Aggregation, AggregationOption } from '~/modules/GraphQL/types'; + +export interface SelectedFiltersInterface {[p: string]: string[]} + +export interface RemovableFilterInterface { + id: string; + name: string; + label: string; + value: string; + type: string; +} + +export function useFilters() { + // @ts-ignore + const { getFacetsFromURL } = useUiHelpers(); + + const getSelectedFiltersFromUrl = () => { + const selectedFilterValues = {}; + const { filters } = getFacetsFromURL(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + Object.keys(filters).forEach((filter) => { + selectedFilterValues[filter] = filters[filter]; + }); + + return selectedFilterValues; + }; + + const selectedFilters = ref(getSelectedFiltersFromUrl()); + + const isFilterSelected = (name: string, value: string) => { + const selected = (selectedFilters.value[name] ?? []).find((selectedValue) => selectedValue === value); + + return selected ?? ''; + }; + + const removeFilter = (attrCode: string, valToRemove: string) => { + if (!selectedFilters.value[attrCode]) return; + selectedFilters.value[attrCode] = selectedFilters.value[attrCode].filter((value) => value !== valToRemove); + }; + + const selectFilter = (filter: Aggregation, option: AggregationOption) => { + const config = getFilterConfig(filter.attribute_code); + if (!selectedFilters.value[filter.attribute_code]) { + set(selectedFilters.value, filter.attribute_code, []); + } + + if (config.type === FilterTypeEnum.RADIO || config.type === FilterTypeEnum.YES_NO) { + selectedFilters.value[filter.attribute_code] = [option.value]; + return; + } + + if (selectedFilters.value[filter.attribute_code].find((f) => f === option.value)) { + selectedFilters.value[filter.attribute_code] = selectedFilters.value[ + filter.attribute_code + ]?.filter((f) => f !== option.value); + return; + } + + selectedFilters.value[filter.attribute_code].push(String(option.value)); + }; + + const getRemovableFilters = (filters: Aggregation[], selected: SelectedFiltersInterface): RemovableFilterInterface[] => { + const result = []; + + filters.forEach((filter) => { + filter.options.forEach((option) => { + if ((selected[filter.attribute_code] ?? []).includes(option.value)) { + const filterConfig = getFilterConfig(filter.attribute_code); + + result.push({ + id: filter.attribute_code, name: filter.label, label: option.label, value: option.value, type: filterConfig.type, + }); + } + }); + }); + + return result; + }; + + return { + getSelectedFiltersFromUrl, + isFilterSelected, + removeFilter, + selectFilter, + selectedFilters, + getRemovableFilters, + }; +} + +export default useFilters; diff --git a/modules/catalog/category/components/navbar/CategoryNavbar.vue b/modules/catalog/category/components/navbar/CategoryNavbar.vue new file mode 100644 index 0000000..8456988 --- /dev/null +++ b/modules/catalog/category/components/navbar/CategoryNavbar.vue @@ -0,0 +1,297 @@ + + + + diff --git a/modules/catalog/category/components/navbar/__tests__/CategoryNavbar.spec.js b/modules/catalog/category/components/navbar/__tests__/CategoryNavbar.spec.js new file mode 100644 index 0000000..ccebafe --- /dev/null +++ b/modules/catalog/category/components/navbar/__tests__/CategoryNavbar.spec.js @@ -0,0 +1,80 @@ +import userEvent from '@testing-library/user-event'; +import { render } from '~/tests/unit/test-utils'; +import CategoryNavbar from '../CategoryNavbar.vue'; +import { paginationData, sortByData } from '~/tests/unit/mocks/categoryNavbarMock'; +import { useUiHelpers, useUiState } from '~/composables'; +import useUiHelpersMock from '~/tests/unit/mocks/useUiHelpersMock'; +import useUiStateMock from '~/tests/unit/mocks/useUiState'; + +jest.mock('~/composables', () => ({ + ...jest.requireActual('~/composables'), + useUiHelpers: jest.fn(), + useUiState: jest.fn(), +})); + +const categoryNavbarProps = { props: { pagination: paginationData, sortBy: sortByData } }; +const loadingCategoryNavbarProps = { props: { pagination: paginationData, sortBy: sortByData, isLoading: true } }; + +describe('CategoryNavbar.vue', () => { + it('Should render Skeleton when loading is true', () => { + const uiStateMock = useUiStateMock(); + useUiState.mockReturnValue(uiStateMock); + const { getAllByTestId } = render(CategoryNavbar, loadingCategoryNavbarProps); + + const skeletonLoaders = getAllByTestId('skeletonLoader'); + + skeletonLoaders.forEach((skeletonLoader) => { + expect(skeletonLoader).toBeInTheDocument(); + }); + }); + + it('Should render "Filters" button and call "toggleFilterSidebar" when clicked', async () => { + const uiStateMock = useUiStateMock(); + useUiState.mockReturnValue(uiStateMock); + const { getByText } = render(CategoryNavbar, categoryNavbarProps); + const button = getByText('Filters'); + + await userEvent.click(button); + + expect(uiStateMock.toggleFilterSidebar).toHaveBeenCalledTimes(1); + }); + + it('Should render "sort by" select and change selection and select has all expected options based on its data', async () => { + const uiHelperMock = useUiHelpersMock(); + useUiHelpers.mockReturnValue(uiHelperMock); + + const { + getByRole, getByText, getAllByRole, emitted, + } = render(CategoryNavbar, categoryNavbarProps); + const sortSelect = getByRole('combobox'); + const options = getAllByRole('option'); + expect(options).toHaveLength(categoryNavbarProps.props.sortBy.options.length); + + await userEvent.selectOptions(sortSelect, ['name_ASC']); + expect(getByText('Sort: Name A-Z').value).toBe(sortSelect.value); + expect(emitted().reloadProducts).toHaveProperty('length', 1); + }); + + it('Should render list view icon and change to "List view" when clicked.', async () => { + const uiStateMock = useUiStateMock(); + useUiState.mockReturnValue(uiStateMock); + + const { getByLabelText } = render(CategoryNavbar, categoryNavbarProps); + const listViewIcon = getByLabelText(/change to list view/i); + + await userEvent.click(listViewIcon); + expect(uiStateMock.changeToCategoryListView).toHaveBeenCalledTimes(1); + }); + + it('Should render grid view icon and change to "Grid view" when clicked.', async () => { + const uiStateMock = useUiStateMock(); + useUiState.mockReturnValue(uiStateMock); + + const { getByLabelText } = render(CategoryNavbar, categoryNavbarProps); + const gridViewIcon = getByLabelText(/change to grid view/i); + + await userEvent.click(gridViewIcon); + + expect(uiStateMock.changeToCategoryGridView).toHaveBeenCalledTimes(1); + }); +}); diff --git a/modules/catalog/category/components/pagination/CategoryPagination.vue b/modules/catalog/category/components/pagination/CategoryPagination.vue new file mode 100644 index 0000000..dc544d4 --- /dev/null +++ b/modules/catalog/category/components/pagination/CategoryPagination.vue @@ -0,0 +1,25 @@ + diff --git a/modules/catalog/category/components/sidebar/MobileCategorySidebar/MobileCategorySidebar.vue b/modules/catalog/category/components/sidebar/MobileCategorySidebar/MobileCategorySidebar.vue new file mode 100644 index 0000000..ffe5935 --- /dev/null +++ b/modules/catalog/category/components/sidebar/MobileCategorySidebar/MobileCategorySidebar.vue @@ -0,0 +1,128 @@ + + + + diff --git a/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/MobileCategorySidebar.spec.ts b/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/MobileCategorySidebar.spec.ts new file mode 100644 index 0000000..1a98299 --- /dev/null +++ b/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/MobileCategorySidebar.spec.ts @@ -0,0 +1,176 @@ +import userEvent from '@testing-library/user-event'; +import { useRoute, useContext, useRouter } from '@nuxtjs/composition-api'; +import { render } from '~/tests/unit/test-utils'; +import { useUiHelpers, useUiState } from '~/composables'; +import { useCategoryStore } from '~/modules/catalog/category/stores/category'; +import useUiHelpersMock from '~/tests/unit/mocks/useUiHelpersMock'; +import useUiStateMock from '~/tests/unit/mocks/useUiState'; +import useRouteMock from '~/tests/unit/mocks/useRoute'; +import useRouterMock from '~/tests/unit/mocks/useRouter'; +import useContextMock from '~/tests/unit/mocks/useContext'; +import { womanCategoryTreeData, defaultCategoryTreeData } from '~/tests/unit/mocks/categoryTreeDataMock'; +import useCategoryStoreMock from '~/tests/unit/mocks/useCategoryStore'; +import { useMobileCategoryTree } from '../logic'; +import MobileCategorySidebar from '../MobileCategorySidebar.vue'; + +jest.mock('~/composables', () => { + const composables = jest.requireActual('~/composables'); + return { + ...composables, + useUiHelpers: jest.fn(), + useUiState: jest.fn(), + }; +}); + +jest.mock('~/modules/catalog/category/stores/category', () => { + const category = jest.requireActual('~/modules/catalog/category/stores/category'); + return { + ...category, + useCategoryStore: jest.fn(), + }; +}); + +jest.mock('@nuxtjs/composition-api', () => { + const compositionApi = jest.requireActual('@nuxtjs/composition-api'); + return { + ...compositionApi, + useContext: jest.fn(), + useRoute: jest.fn(), + useRouter: jest.fn(), + }; +}); + +jest.mock('../logic', () => { + const logic = jest.requireActual('../logic'); + return { + ...logic, + useMobileCategoryTree: jest.fn(), + }; +}); + +describe('MobileCategorySidebar.vue', () => { + beforeEach(() => { + const uiStateMock = useUiStateMock(); + const UiHelpersMock = useUiHelpersMock(); + const routeMock = useRouteMock(); + const routerMock = useRouterMock(); + const contextMock = useContextMock(); + const categoryStoreMock = useCategoryStoreMock(); + + (useUiState as jest.Mock).mockReturnValue(uiStateMock); + (useUiHelpers as jest.Mock).mockReturnValue(UiHelpersMock); + (useRoute as jest.Mock).mockReturnValue(routeMock); + (useRouter as jest.Mock).mockReturnValue(routerMock); + (useContext as jest.Mock).mockReturnValue(contextMock); + (useCategoryStore as unknown as jest.Mock).mockReturnValue(categoryStoreMock); + }); + + it('Should render all initial categories', () => { + (useMobileCategoryTree as jest.Mock).mockReturnValue({ + currentItems: { + value: defaultCategoryTreeData, + }, + }); + + const { getByText } = render(MobileCategorySidebar); + const womenCategory = getByText('Women'); + const menCategory = getByText('Men'); + const gearCategory = getByText('Gear'); + const trainingCategory = getByText('Training'); + + expect(womenCategory).toBeDefined(); + expect(menCategory).toBeDefined(); + expect(gearCategory).toBeDefined(); + expect(trainingCategory).toBeDefined(); + }); + + it('if the user click on a category with children deeper categories will be revealed', async () => { + const user = userEvent.setup(); + + const uiStateMock = useUiStateMock(); + const UiHelpersMock = useUiHelpersMock(); + (useUiHelpers as jest.Mock).mockReturnValue(UiHelpersMock); + (useUiState as jest.Mock).mockReturnValue(uiStateMock); + + const categoryTreeData = [...defaultCategoryTreeData]; + const onGoCategoryDownMock = jest.fn(() => categoryTreeData.pop()); + + (useMobileCategoryTree as jest.Mock).mockReturnValue({ + currentItems: { + value: defaultCategoryTreeData, + }, + onGoCategoryDown: onGoCategoryDownMock, + }); + + const { getByText } = render(MobileCategorySidebar); + const womenCategory = getByText('Women'); + + await user.click(womenCategory); + expect(onGoCategoryDownMock).toHaveBeenCalled(); + }); + + it('Should render sub categories when current category is selected and should render "Go back" button.', () => { + (useMobileCategoryTree as jest.Mock).mockReturnValue(womanCategoryTreeData); + + const { getByText } = render(MobileCategorySidebar); + const backButton = getByText('Go back'); + const topsButton = getByText('Tops'); + const bottomsButton = getByText('Bottoms'); + + expect(backButton).toBeDefined(); + expect(topsButton).toBeDefined(); + expect(bottomsButton).toBeDefined(); + }); + + it('Should go back when "Go back" button is clicked', async () => { + const onGoCategoryUpMock = jest.fn(); + + (useMobileCategoryTree as jest.Mock).mockReturnValue({ + ...womanCategoryTreeData, + onGoCategoryUp: onGoCategoryUpMock, + }); + + const { getByText } = render(MobileCategorySidebar); + const backButton = getByText('Go back'); + + await userEvent.click(backButton); + + expect(onGoCategoryUpMock).toHaveBeenCalledTimes(1); + }); + + it('if the user click on a category without children he will be redirected to that category', async () => { + const onGoCategoryDownMock = jest.fn((val) => val); + const UiHelpersMock = useUiHelpersMock(); + + (useUiHelpers as jest.Mock).mockReturnValue(UiHelpersMock); + + (useMobileCategoryTree as jest.Mock).mockReturnValue({ + currentItems: { + value: defaultCategoryTreeData, + }, + onGoCategoryDown: onGoCategoryDownMock, + }); + + const { getByText } = render(MobileCategorySidebar); + + const trainingButton = getByText('Training'); + + await userEvent.click(trainingButton); + expect(UiHelpersMock.getCatLink).toHaveBeenCalledWith(defaultCategoryTreeData[3]); + }); + + it('if the user click on the back arrow (not the go back button) menu will be hidden', async () => { + const user = userEvent.setup(); + + const uiStateMock = useUiStateMock(); + (useUiState as jest.Mock).mockReturnValue(uiStateMock); + (useMobileCategoryTree as jest.Mock).mockReturnValue(womanCategoryTreeData); + + const { getByLabelText } = render(MobileCategorySidebar); + const backbutton = getByLabelText('back'); + + await user.click(backbutton); + + expect(uiStateMock.toggleMobileMenu).toHaveBeenCalledTimes(1); + }); +}); diff --git a/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/logic.spec.ts b/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/logic.spec.ts new file mode 100644 index 0000000..bc406fb --- /dev/null +++ b/modules/catalog/category/components/sidebar/MobileCategorySidebar/__tests__/logic.spec.ts @@ -0,0 +1,41 @@ +import { CategoryTree } from '~/modules/catalog/category/types'; +import { useMobileCategoryTree } from '../logic'; + +const createCategoryItem = (name: string): CategoryTree => ({ + name, children: [], redirect_code: 302, uid: `${name}_${Math.floor(Math.random() * 100)}`, +}); + +describe('categoryTreeLogic', () => { + it('can go down down a category', () => { + const itemFirst = createCategoryItem('Itemless1'); + const { history, current, onGoCategoryDown } = useMobileCategoryTree(); + onGoCategoryDown(itemFirst); + expect(current.value.name).toBe(itemFirst.name); + expect(history.value).toHaveLength(1); + }); + + it('can go up a category', () => { + const itemFirst = createCategoryItem('Itemless1'); + const itemSecond = createCategoryItem('Itemless2'); + + const { current, onGoCategoryDown, onGoCategoryUp } = useMobileCategoryTree(); + + onGoCategoryDown(itemFirst); + onGoCategoryDown(itemSecond); + onGoCategoryUp(); + + expect(current.value.name).toBe(itemFirst.name); + }); + + it('current item is last in history', () => { + const itemFirst = createCategoryItem('Itemless1'); + const itemSecond = createCategoryItem('Itemless2'); + const { history, current, onGoCategoryDown } = useMobileCategoryTree(); + + onGoCategoryDown(itemFirst); + onGoCategoryDown(itemSecond); + + expect(current.value.name).toBe(itemSecond.name); + expect(history.value).toHaveLength(2); + }); +}); diff --git a/modules/catalog/category/components/sidebar/MobileCategorySidebar/logic.ts b/modules/catalog/category/components/sidebar/MobileCategorySidebar/logic.ts new file mode 100644 index 0000000..f2c7d4e --- /dev/null +++ b/modules/catalog/category/components/sidebar/MobileCategorySidebar/logic.ts @@ -0,0 +1,20 @@ +import { computed, ref } from '@nuxtjs/composition-api'; +import { CategoryTree } from '~/modules/GraphQL/types'; + +export const useMobileCategoryTree = (initialHistory: CategoryTree[] = []) => { + const history = ref(initialHistory); + const current = computed(() => history.value.at(-1) ?? null); + const currentItems = computed(() => current.value?.children); + const onGoCategoryDown = (category: CategoryTree) => { + history.value.push(category); + }; + const onGoCategoryUp = () => history.value.pop(); + + return { + history, + current, + currentItems, + onGoCategoryUp, + onGoCategoryDown, + }; +}; diff --git a/modules/catalog/category/components/views/CategoryProductGrid.vue b/modules/catalog/category/components/views/CategoryProductGrid.vue new file mode 100644 index 0000000..4db8a5e --- /dev/null +++ b/modules/catalog/category/components/views/CategoryProductGrid.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/modules/catalog/category/components/views/CategoryProductList.vue b/modules/catalog/category/components/views/CategoryProductList.vue new file mode 100644 index 0000000..f5e8ba0 --- /dev/null +++ b/modules/catalog/category/components/views/CategoryProductList.vue @@ -0,0 +1,200 @@ + + + + diff --git a/modules/catalog/category/components/views/CategoryProductPrice.vue b/modules/catalog/category/components/views/CategoryProductPrice.vue new file mode 100644 index 0000000..75903c7 --- /dev/null +++ b/modules/catalog/category/components/views/CategoryProductPrice.vue @@ -0,0 +1,93 @@ + + + diff --git a/modules/catalog/category/components/views/__tests__/CategoryProductGrid.spec.ts b/modules/catalog/category/components/views/__tests__/CategoryProductGrid.spec.ts new file mode 100644 index 0000000..54fb332 --- /dev/null +++ b/modules/catalog/category/components/views/__tests__/CategoryProductGrid.spec.ts @@ -0,0 +1,40 @@ +import { render } from '@testing-library/vue'; +import { createTestingPinia } from '@pinia/testing'; +import { createLocalVue } from '@vue/test-utils'; +import { PiniaVuePlugin } from 'pinia'; +import CategoryProductGrid from '../CategoryProductGrid.vue'; +import { productsMock } from './productsMock'; + +const localVue = createLocalVue(); +localVue.use(PiniaVuePlugin); + +jest.mock('~/composables', () => { + const originalComposables = jest.requireActual('~/composables'); + return { + ...originalComposables, + useUiNotification: jest.fn(() => ({ + send: jest.fn(), + })), + }; +}); + +describe('CategoryProductGrid', () => { + it('shows skeleton loader when loading', async () => { + const { findAllByTestId } = render(CategoryProductGrid, { props: { loading: true, products: [] }, localVue, pinia: createTestingPinia() }); + const loadingSkeletons = await findAllByTestId('skeleton'); + expect(loadingSkeletons).not.toHaveLength(0); + }); + + it('shows products when loaded', async () => { + const { findAllByTestId } = render(CategoryProductGrid, { + props: { + loading: false, + products: productsMock, + }, + localVue, + pinia: createTestingPinia(), + }); + const products = await findAllByTestId('product-card'); + expect(products).toHaveLength(productsMock.length); + }); +}); diff --git a/modules/catalog/category/components/views/__tests__/CategoryProductList.spec.ts b/modules/catalog/category/components/views/__tests__/CategoryProductList.spec.ts new file mode 100644 index 0000000..51eeace --- /dev/null +++ b/modules/catalog/category/components/views/__tests__/CategoryProductList.spec.ts @@ -0,0 +1,59 @@ +import { render } from '@testing-library/vue'; +import { createLocalVue } from '@vue/test-utils'; +import { PiniaVuePlugin } from 'pinia'; +import { createTestingPinia } from '@pinia/testing'; +import { productsMock } from './productsMock'; +import CategoryProductList from '../CategoryProductList.vue'; + +const localVue = createLocalVue(); +localVue.use(PiniaVuePlugin); + +jest.mock('~/composables', () => { + const originalComposables = jest.requireActual('~/composables'); + return { + ...originalComposables, + useUiNotification: jest.fn(() => ({ + send: jest.fn(), + })), + }; +}); + +describe('CategoryProductList', () => { + it.each([ + [true, true], + [false, false], + ])('has correct \'Add to wishlist\' button visiblity when loggin state is %s', (isLoggedIn, expectedVisibility) => { + const { queryByTestId } = render(CategoryProductList, { + props: { + loading: false, + products: [productsMock[0]], + }, + localVue, + pinia: createTestingPinia({ initialState: { customer: { isLoggedIn } } }), + }); + expect(Boolean(queryByTestId('wishlist-button'))).toBe(expectedVisibility); + }); + + it('shows skeleton loader when loading', async () => { + const { findAllByTestId } = render(CategoryProductList, { + props: { + loading: true, + products: [], + }, + localVue, + pinia: createTestingPinia(), + }); + const loadingSkeletons = await findAllByTestId('skeleton'); + expect(loadingSkeletons).not.toHaveLength(0); + }); + + it('shows products when loaded', async () => { + const { findAllByTestId } = render(CategoryProductList, { + props: { loading: false, products: productsMock }, + localVue, + pinia: createTestingPinia(), + }); + const products = await findAllByTestId('product-card'); + expect(products).toHaveLength(productsMock.length); + }); +}); diff --git a/modules/catalog/category/components/views/__tests__/productsMock.ts b/modules/catalog/category/components/views/__tests__/productsMock.ts new file mode 100644 index 0000000..40e068b --- /dev/null +++ b/modules/catalog/category/components/views/__tests__/productsMock.ts @@ -0,0 +1,258 @@ +export const productsMock = [ + { + __typename: 'GroupedProduct', + uid: 'NTI=', + sku: '24-WG085_Group', + name: 'Set of Sprite Yoga Straps', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/l/u/luma-yoga-strap-set.jpg', position: null, disabled: null, label: 'Set of Sprite Yoga Straps', + }, + url_key: 'set-of-sprite-yoga-straps', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'set-of-sprite-yoga-straps.html' }, { __typename: 'UrlRewrite', url: 'gear/set-of-sprite-yoga-straps.html' }, { __typename: 'UrlRewrite', url: 'gear/fitness-equipment/set-of-sprite-yoga-straps.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 14 }, regular_price: { __typename: 'Money', currency: 'USD', value: 14 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 14 }, regular_price: { __typename: 'Money', currency: 'USD', value: 14 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'NQ==', name: 'Fitness Equipment', url_suffix: '.html', url_path: 'gear/fitness-equipment', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + review_count: 0, + reviews: { __typename: 'ProductReviews', items: [] }, + commonProps: { + 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', + uid: 'NDU=', + sku: '24-WG080', + name: 'Sprite Yoga Companion Kit', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/l/u/luma-yoga-kit-2.jpg', position: null, disabled: null, label: 'Sprite Yoga Companion Kit', + }, + url_key: 'sprite-yoga-companion-kit', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'sprite-yoga-companion-kit.html' }, { __typename: 'UrlRewrite', url: 'gear/sprite-yoga-companion-kit.html' }, { __typename: 'UrlRewrite', url: 'gear/fitness-equipment/sprite-yoga-companion-kit.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 77 }, regular_price: { __typename: 'Money', currency: 'USD', value: 77 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 61 }, regular_price: { __typename: 'Money', currency: 'USD', value: 61 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'NQ==', name: 'Fitness Equipment', url_suffix: '.html', url_path: 'gear/fitness-equipment', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + review_count: 0, + reviews: { __typename: 'ProductReviews', items: [] }, + commonProps: { + 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', + uid: 'NDQ=', + sku: '24-WG02', + name: 'Didi Sport Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 73, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/w/g/wg02-bk-0.jpg', position: null, disabled: null, label: 'Didi Sport Watch', + }, + url_key: 'didi-sport-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'didi-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/didi-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/didi-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/didi-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/yoga-new/didi-sport-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 92 }, regular_price: { __typename: 'Money', currency: 'USD', value: 92 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 92 }, regular_price: { __typename: 'Money', currency: 'USD', value: 92 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }, { + __typename: 'CategoryTree', uid: 'Nw==', name: 'Collections', url_suffix: '.html', url_path: 'collections', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'OA==', name: 'New Luma Yoga Collection', url_suffix: '.html', url_path: 'collections/yoga-new', breadcrumbs: null, + }], + 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/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', + uid: 'NDM=', + sku: '24-WG03', + name: 'Clamber Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 53, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/w/g/wg03-gr-0.jpg', position: null, disabled: null, label: 'Clamber Watch', + }, + url_key: 'clamber-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'clamber-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/clamber-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/clamber-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 54 }, regular_price: { __typename: 'Money', currency: 'USD', value: 54 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 54 }, regular_price: { __typename: 'Money', currency: 'USD', value: 54 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + 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/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', + uid: 'NDI=', + sku: '24-WG01', + name: 'Bolo Sport Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 67, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/w/g/wg01-bk-0.jpg', position: null, disabled: null, label: 'Bolo Sport Watch', + }, + url_key: 'bolo-sport-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'bolo-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/bolo-sport-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/bolo-sport-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 49 }, regular_price: { __typename: 'Money', currency: 'USD', value: 49 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 49 }, regular_price: { __typename: 'Money', currency: 'USD', value: 49 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + 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/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', + uid: 'NDE=', + sku: '24-WG09', + name: 'Luma Analog Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 80, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/w/g/wg09-gr-0.jpg', position: null, disabled: null, label: 'Luma Analog Watch', + }, + url_key: 'luma-analog-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'luma-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/luma-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/luma-analog-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 43 }, regular_price: { __typename: 'Money', currency: 'USD', value: 43 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 43 }, regular_price: { __typename: 'Money', currency: 'USD', value: 43 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + 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/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', + uid: 'NDA=', + sku: '24-MG02', + name: 'Dash Digital Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 73, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/m/g/mg02-bk-0.jpg', position: null, disabled: null, label: 'Dash Digital Watch', + }, + url_key: 'dash-digital-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'dash-digital-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/dash-digital-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/dash-digital-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/dash-digital-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/yoga-new/dash-digital-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 92 }, regular_price: { __typename: 'Money', currency: 'USD', value: 92 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 92 }, regular_price: { __typename: 'Money', currency: 'USD', value: 92 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }, { + __typename: 'CategoryTree', uid: 'Nw==', name: 'Collections', url_suffix: '.html', url_path: 'collections', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'OA==', name: 'New Luma Yoga Collection', url_suffix: '.html', url_path: 'collections/yoga-new', breadcrumbs: null, + }], + 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/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', + uid: 'Mzk=', + sku: '24-MG05', + name: 'Cruise Dual Analog Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 65, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/m/g/mg05-br-0.jpg', position: null, disabled: null, label: 'Cruise Dual Analog Watch', + }, + url_key: 'cruise-dual-analog-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'cruise-dual-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/cruise-dual-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/cruise-dual-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/cruise-dual-analog-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/yoga-new/cruise-dual-analog-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 55 }, regular_price: { __typename: 'Money', currency: 'USD', value: 55 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 55 }, regular_price: { __typename: 'Money', currency: 'USD', value: 55 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }, { + __typename: 'CategoryTree', uid: 'Nw==', name: 'Collections', url_suffix: '.html', url_path: 'collections', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'OA==', name: 'New Luma Yoga Collection', url_suffix: '.html', url_path: 'collections/yoga-new', breadcrumbs: null, + }], + 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/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', + uid: 'Mzg=', + sku: '24-MG03', + name: 'Summit Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 47, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/m/g/mg03-br-0.jpg', position: null, disabled: null, label: 'Summit Watch', + }, + url_key: 'summit-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'summit-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/summit-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/summit-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/summit-watch.html' }, { __typename: 'UrlRewrite', url: 'collections/yoga-new/summit-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 54 }, regular_price: { __typename: 'Money', currency: 'USD', value: 54 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 54 }, regular_price: { __typename: 'Money', currency: 'USD', value: 54 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }, { + __typename: 'CategoryTree', uid: 'Nw==', name: 'Collections', url_suffix: '.html', url_path: 'collections', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'OA==', name: 'New Luma Yoga Collection', url_suffix: '.html', url_path: 'collections/yoga-new', breadcrumbs: null, + }], + 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/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', + uid: 'Mzc=', + sku: '24-MG01', + name: 'Endurance Watch', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 87, + thumbnail: { + __typename: 'ProductImage', url: 'https://magento2-instance.vuestorefront.io/media/catalog/product/cache/e594b79cbfbeb6488381857e5a9b6158/m/g/mg01-bk-0.jpg', position: null, disabled: null, label: 'Endurance Watch', + }, + url_key: 'endurance-watch', + url_rewrites: [{ __typename: 'UrlRewrite', url: 'endurance-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/endurance-watch.html' }, { __typename: 'UrlRewrite', url: 'gear/watches/endurance-watch.html' }], + price_range: { __typename: 'PriceRange', maximum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 49 }, regular_price: { __typename: 'Money', currency: 'USD', value: 49 } }, minimum_price: { __typename: 'ProductPrice', final_price: { __typename: 'Money', currency: 'USD', value: 49 }, regular_price: { __typename: 'Money', currency: 'USD', value: 49 } } }, + categories: [{ + __typename: 'CategoryTree', uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, + }, { + __typename: 'CategoryTree', uid: 'Ng==', name: 'Watches', url_suffix: '.html', url_path: 'gear/watches', breadcrumbs: [{ __typename: 'Breadcrumb', category_name: 'Gear', category_url_path: 'gear' }], + }], + 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/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/modules/catalog/category/components/views/transition.scss b/modules/catalog/category/components/views/transition.scss new file mode 100644 index 0000000..d9ec5e5 --- /dev/null +++ b/modules/catalog/category/components/views/transition.scss @@ -0,0 +1,10 @@ +.slide { + &-enter { + opacity: 0; + transform: scale(0.5); + &-active { + transition: all 0.2s ease; + transition-delay: calc(0.1s * var(--index)); + } + } +} diff --git a/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts b/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts new file mode 100644 index 0000000..c591b79 --- /dev/null +++ b/modules/catalog/category/components/views/useProductsWithCommonCardProps.ts @@ -0,0 +1,99 @@ +import { computed, Ref, useContext } from '@nuxtjs/composition-api'; +import type { Route } from 'vue-router'; +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, getProductThumbnailImage, +} from '~/modules/catalog/product/getters/productGetters'; +import { getAverageRating, getTotalReviews } from '~/modules/review/getters/reviewGetters'; +import { useAddToCart } from '~/helpers/cart/addToCart'; +import type { Product } from '~/modules/catalog/product/types'; + +export interface ProductCommonCardProps { + title: string; + link: Route, + style: Record | string, + isAddedToCart: boolean, + + image: string, + imageTag: string, + nuxtImgConfig: { [key in keyof ImageModifiers]?: ImageModifiers[key] }, + + isInWishlist: boolean, + isInWishlistIcon: string, + wishlistIcon: string, + + regularPrice: string, + specialPrice: string, + maximumPrice: string, + + reviewsCount: number, + scoreRating: number, +} + +export type ProductWithCommonProductCardProps = Product & { commonProps: ProductCommonCardProps }; + +export const useProductsWithCommonProductCardProps = (products: Ref) => { + const { getMagentoImage } = useImage(); + const { isInWishlist } = useWishlist(); + const { isAuthenticated } = useUser(); + const { isInCart } = useAddToCart(); + const { getProductPath } = useProduct(); + const context = useContext(); + + /** + * Most props of SfProductCard and SfProductCardHorizontal are the same. + * To avoid passing tens of props to both components two times, + * instead the below object is passed to them using `v-bind="product.commonProps"` + */ + const productsWithCommonProductCardProps = computed( + () => products.value.map((product, index) => { + const imageProps = { + image: getMagentoImage(getProductThumbnailImage(product)), + imageTag: 'nuxt-img', + nuxtImgConfig: { fit: 'cover' }, + }; + + const wishlistProps = { + isInWishlist: isInWishlist({ product }), + isInWishlistIcon: isAuthenticated.value ? 'heart_fill' : '', + wishlistIcon: isAuthenticated.value ? 'heart' : '', + }; + + const price = getPrice(product); + + const priceProps = { + regularPrice: context.$fc(price.regular), + specialPrice: price.special && context.$fc(getPrice(product).special), + maximumPrice: price.maximum && context.$fc(getPrice(product).maximum), + }; + + const reviewProps = { + reviewsCount: getTotalReviews(product), + scoreRating: getAverageRating(product), + }; + + const link = context.localeRoute(getProductPath(product)); + + const commonProps = { + title: getName(product), + link, + style: { '--index': index }, // used for transition animation + isAddedToCart: isInCart(product), + ...imageProps, + ...wishlistProps, + ...priceProps, + ...reviewProps, + }; + + return { + ...product, + commonProps, + }; + }), + ); + return { productsWithCommonProductCardProps }; +}; diff --git a/modules/catalog/category/composables/useCategory/categoryMeta.gql.ts b/modules/catalog/category/composables/useCategory/categoryMeta.gql.ts new file mode 100644 index 0000000..f51ec27 --- /dev/null +++ b/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/modules/catalog/category/composables/useCategory/index.ts b/modules/catalog/category/composables/useCategory/index.ts new file mode 100644 index 0000000..932fe14 --- /dev/null +++ b/modules/catalog/category/composables/useCategory/index.ts @@ -0,0 +1,140 @@ +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'; + +/** + * @public + * + * Allows loading categories from Magento API. It + * is commonly used in navigation menus, and provides the load function and + * refs for the categories, loading and error. + * + * See the {@link UseCategoryInterface} for a list of methods and values available in this composable. + * + * @remarks + * + * Under the hood, it calls the following Server Middleware API method: + * + * - {@link @vue-storefront/magento-api#categoryList} for loading category list; + * + * It is currently used in: + * + * - `components/AppHeader.vue` + * + * - `components/MobileMenuSidebar.vue` + * + * @example + * + * Load categories on client side using the `onMounted` Composition API hook: + * + * ```vue + * + * + * + * ``` + */ +export function useCategory(): UseCategoryInterface { + const { app } = useContext(); + const loading: Ref = ref(false); + const error: Ref = ref({ + load: null, + loadCategoryMeta: null, + }); + const categories: Ref> = ref(null); + + const load = async (params: UseCategoryParamsInput) => { + Logger.debug('useCategory/load', params); + + try { + loading.value = true; + const { data } = await app.context.$vsf.$magento.api.categoryList(params, params?.customQuery ?? null, params?.customHeaders); + Logger.debug('[Result]:', { data }); + categories.value = data?.categories?.items ?? []; + error.value.load = null; + } catch (err) { + error.value.load = err; + Logger.error('useCategory/load', err); + } finally { + loading.value = false; + } + }; + + 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, + }, + }, + }, + customHeaders: params?.customHeaders, + }); + 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, + }; +} + +export * from './useCategory'; + +export default useCategory; diff --git a/modules/catalog/category/composables/useCategory/useCategory.ts b/modules/catalog/category/composables/useCategory/useCategory.ts new file mode 100644 index 0000000..afd558c --- /dev/null +++ b/modules/catalog/category/composables/useCategory/useCategory.ts @@ -0,0 +1,97 @@ +import type { Ref } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type{ CategoryTree } from '~/modules/GraphQL/types'; +/** + * The {@link useCategory} error object. Its properties values' are the errors + * thrown by composable methods. + * + * @example + * + * Use `error` to check if loading fails: + * + * ```typescript + * import { useFetch } from '@nuxtjs/composition-api'; + * import { useCategory } from '~/modules/catalog/category/composables/useCategory'; + * + * export default { + * setup() { + * const { categories, error, load, loading } = useCategory(); + * + * useFetch(async () => { + * await load({ pageSize: 10 }); + * + * // It's an error when loading fails + * if (error.value.load) { + * // Handle load errors + * } + * }); + * + * return { categories, loading }; + * }, + * }; + * ``` + */ +export interface UseCategoryErrors { + /** Error when loading categories fails, otherwise is `null`. */ + load: Error; + loadCategoryMeta: Error; +} + +/** The {@link useCategory} params object received by `load` function. */ +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 + * */ +export interface UseCategoryInterface { + /** The array of {@link CategoryTree} fetched in the `load` method, otherwise is `null`. */ + categories: Ref; + + /** The error object */ + error: Ref; + + /** + * The loading state. + * + * It's `true` when loading and `false` otherwise. + */ + loading: Ref; + + /** + * A method that loads the list of {@link CategoryTree} and updates `categories`. + * + * @example + * + * Loads the categories on server side using the `useFetch` composable: + * + * ```typescript + * import { useFetch } from '@nuxtjs/composition-api'; + * import { useCategory } from '~/modules/catalog/category/composables/useCategory'; + * + * export default { + * setup() { + * const { categories, error, load } = useCategory(); + * + * useFetch(async () => { + * await load({ pageSize: 10 }) + * + * if (error.value.load) { + * // Handle load errors by, for example, redirecting to 404 + * } + * }); + * + * return { categories }; + * }, + * }; + * ``` + */ + load(params: ComposableFunctionArgs): Promise; + loadCategoryMeta(params: ComposableFunctionArgs): Promise; +} diff --git a/modules/catalog/category/composables/useCategorySearch/index.ts b/modules/catalog/category/composables/useCategorySearch/index.ts new file mode 100644 index 0000000..4afbd6d --- /dev/null +++ b/modules/catalog/category/composables/useCategorySearch/index.ts @@ -0,0 +1,51 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import type { CategorySearchQueryVariables, CategoryTree } from '~/modules/GraphQL/types'; +import type { UseCategorySearchErrors, UseCategorySearchInterface } from './useCategorySearch'; +import { ComposableFunctionArgs } from '~/composables'; + +/** + * Allows searching for categories. It is + * commonly used in subtrees navigation. + * + * See the {@link UseCategorySearchInterface} for a list of methods and values available in this composable. + */ +export function useCategorySearch(): UseCategorySearchInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref({ + search: null, + }); + const result = ref(null); + + const search = async (params: ComposableFunctionArgs) => { + Logger.debug('useCategory/search', params); + + try { + loading.value = true; + const { filters } = params; + const { data } = await app.context.$vsf.$magento.api.categorySearch({ filters }, params?.customQuery ?? null, params?.customHeaders); + + Logger.debug('[Result]:', { data }); + + result.value = data.categoryList; + error.value.search = null; + } catch (err) { + error.value.search = err; + result.value = null; + Logger.error('useCategory/search', err); + } finally { + loading.value = false; + } + }; + + return { + search, + loading: readonly(loading), + error: readonly(error), + result: readonly(result), + }; +} + +export * from './useCategorySearch'; +export default useCategorySearch; diff --git a/modules/catalog/category/composables/useCategorySearch/useCategorySearch.ts b/modules/catalog/category/composables/useCategorySearch/useCategorySearch.ts new file mode 100644 index 0000000..79449b6 --- /dev/null +++ b/modules/catalog/category/composables/useCategorySearch/useCategorySearch.ts @@ -0,0 +1,45 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { CategorySearchQueryVariables, CategoryTree } from '~/modules/GraphQL/types'; +import type { ComposableFunctionArgs } from '~/composables/types'; + +/** + * Errors that occured in the {@link useCategorySearch|useCategorySearch()} composable + */ +export interface UseCategorySearchErrors { + /** + * Contains error if `search` method failed, otherwise is `null` + */ + search: Error | null; +} + +/** + * The params object accepted by the `search` method in the {@link useCategorySearch|useCategorySearch()} composable + */ +export type UseCategorySearchParams = ComposableFunctionArgs; + +/** + * Data and methods returned from the {@link useCategorySearch|useCategorySearch()} composable + */ +export interface UseCategorySearchInterface { + /** + * Searches for categories using the received filters and updates the + * {@link UseCategorySearchInterface.result} ref with the results. + */ + search(searchParams: UseCategorySearchParams): Promise; + + /** + * Contains errors from the composable methods + */ + error: DeepReadonly>; + + /** + * The list of {@link CategoryTree} found by the last search. It's `null` if the + * search has not been executed yet or fails. + */ + result: DeepReadonly>; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; +} diff --git a/modules/catalog/category/composables/useFacet/getFacetData.gql.ts b/modules/catalog/category/composables/useFacet/getFacetData.gql.ts new file mode 100644 index 0000000..e71126a --- /dev/null +++ b/modules/catalog/category/composables/useFacet/getFacetData.gql.ts @@ -0,0 +1,63 @@ +/** + * GraphQL Query that fetches products using received search term and the params + * for filter, sort and pagination. + */ +export default ` + query getFacetData($search: String = "", $filter: ProductAttributeFilterInput, $pageSize: Int = 10, $currentPage: Int = 1, $sort: ProductAttributeSortInput) { + products(search: $search, filter: $filter, pageSize: $pageSize, currentPage: $currentPage, sort: $sort) { + items { + __typename + uid + sku + name + stock_status + only_x_left_in_stock + thumbnail { + url + position + disabled + label + } + url_key + url_rewrites { + url + } + price_range { + maximum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + minimum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + } + ... on GroupedProduct { + items { + product { + sku + } + } + } + } + page_info { + current_page + page_size + total_pages + } + total_count + } + } +`; diff --git a/modules/catalog/category/composables/useFacet/index.ts b/modules/catalog/category/composables/useFacet/index.ts new file mode 100644 index 0000000..d8daad5 --- /dev/null +++ b/modules/catalog/category/composables/useFacet/index.ts @@ -0,0 +1,74 @@ +import { readonly, ref } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; +import useApi from '~/composables/useApi'; +import { sortingOptions } from '~/modules/catalog/category/composables/useFacet/sortingOptions'; +import { perPageOptions } from '~/modules/catalog/category/composables/useFacet/perPageOptions'; +import { createProductAttributeFilterInput } from '~/modules/catalog/category/composables/useFacet/input/createProductAttributeFilterInput'; +import { createProductAttributeSortInput } from '~/modules/catalog/category/composables/useFacet/input/createProductAttributeSortInput'; +import { Products } from '~/modules/GraphQL/types'; +import getFacetDataQuery from './getFacetData.gql'; +import type { + UseFacetInterface, UseFacetErrors, UseFacetSearchResult, FacetSearchParams, +} from './useFacet'; + +/** + * Allows searching for products with pagination, totals and sorting options. + * + * See the {@link UseFacetInterface} for a list of methods and values available in this composable. + */ +export function useFacet(): UseFacetInterface { + const { query } = useApi(); + const loading = ref(false); + const result = ref({ data: null, input: null }); + const error = ref({ + search: null, + }); + const defaultItemsPerPage = 20; + const search = async (params?: FacetSearchParams) => { + Logger.debug('useFacet/search', params); + + result.value.input = params; + try { + loading.value = true; + + const pageSize = params.itemsPerPage ? params.itemsPerPage : defaultItemsPerPage; + + const productSearchParams: GetProductSearchParams = { + pageSize, + search: params.term ? params.term : '', + filter: createProductAttributeFilterInput(params), + sort: createProductAttributeSortInput(params.sort || ''), + currentPage: params.page, + }; + + const { data } = await query<{ products: Products }>(getFacetDataQuery, productSearchParams); + const products = data?.products ?? null; + Logger.debug('[Result]:', { products }); + + result.value.data = { + items: products?.items ?? [], + total: products?.total_count, + availableSortingOptions: sortingOptions, + perPageOptions, + itemsPerPage: pageSize, + }; + error.value.search = null; + } catch (err) { + error.value.search = err; + Logger.error('useFacet/search', err); + } finally { + loading.value = false; + } + }; + + return { + search, + result, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './useFacet'; +export default useFacet; diff --git a/modules/catalog/category/composables/useFacet/input/createProductAttributeFilterInput.ts b/modules/catalog/category/composables/useFacet/input/createProductAttributeFilterInput.ts new file mode 100644 index 0000000..3774807 --- /dev/null +++ b/modules/catalog/category/composables/useFacet/input/createProductAttributeFilterInput.ts @@ -0,0 +1,37 @@ +import { ProductAttributeFilterInput } from '~/modules/GraphQL/types'; +import type { ComposableFunctionArgs } from '~/composables'; +import type { FacetSearchParams } from '../useFacet'; + +export const rangeFilters = ['price']; + +export function createProductAttributeFilterInput(params: ComposableFunctionArgs): ProductAttributeFilterInput { + const attributeFilter : Record = {}; + const inputFilters = params?.filters ?? {}; + + const categoryFilter = { + category_uid: { in: [params.category_uid, ...inputFilters.category_uid ?? []] }, + }; + + Object.keys(inputFilters).forEach((key: string) => { + if (rangeFilters.includes(key)) { + const range = { from: 0, to: 0 }; + const flatValue = inputFilters[key] + .flatMap((inputFilter) => inputFilter.split('_')) + .map((str: string) => Number.parseFloat(str)) + .sort((a, b) => a - b); + + [range.from] = flatValue; + range.to = flatValue[flatValue.length - 1]; + + attributeFilter[key] = range; + } else if (typeof inputFilters[key] === 'string') { + attributeFilter[key] = { eq: inputFilters[key] }; + } else if (inputFilters[key].length === 1) { + attributeFilter[key] = { eq: inputFilters[key][0] }; + } else { + attributeFilter[key] = { in: inputFilters[key] }; + } + }); + + return { ...attributeFilter, ...categoryFilter }; +} diff --git a/modules/catalog/category/composables/useFacet/input/createProductAttributeSortInput.ts b/modules/catalog/category/composables/useFacet/input/createProductAttributeSortInput.ts new file mode 100644 index 0000000..9d6394a --- /dev/null +++ b/modules/catalog/category/composables/useFacet/input/createProductAttributeSortInput.ts @@ -0,0 +1,7 @@ +import { ProductAttributeSortInput } from '~/modules/GraphQL/types'; + +export function createProductAttributeSortInput(sortData: string): ProductAttributeSortInput { + const baseData = sortData.split(/_/gi); + + return baseData.length > 0 ? Object.fromEntries([baseData]) : {}; +} diff --git a/modules/catalog/category/composables/useFacet/perPageOptions.ts b/modules/catalog/category/composables/useFacet/perPageOptions.ts new file mode 100644 index 0000000..7851276 --- /dev/null +++ b/modules/catalog/category/composables/useFacet/perPageOptions.ts @@ -0,0 +1 @@ +export const perPageOptions = [10, 20, 50]; diff --git a/modules/catalog/category/composables/useFacet/sortingOptions.ts b/modules/catalog/category/composables/useFacet/sortingOptions.ts new file mode 100644 index 0000000..bb173b3 --- /dev/null +++ b/modules/catalog/category/composables/useFacet/sortingOptions.ts @@ -0,0 +1,40 @@ +export interface SortingModel { + selected: string, + options: SortingOption[] +} + +export interface SortingOption { + label: string, + value: SortingOptionsValuesEnum +} + +export enum SortingOptionsValuesEnum { + DEFAULT = '', + NAME_ASC = 'name_ASC', + NAME_DESC = 'name_DESC', + PRICE_ASC = 'price_ASC', + PRICE_DESC = 'price_DESC', +} + +export const sortingOptions: SortingOption[] = [ + { + label: 'Sort: Default', + value: SortingOptionsValuesEnum.DEFAULT, + }, + { + label: 'Sort: Name A-Z', + value: SortingOptionsValuesEnum.NAME_ASC, + }, + { + label: 'Sort: Name Z-A', + value: SortingOptionsValuesEnum.NAME_DESC, + }, + { + label: 'Sort: Price from low to high', + value: SortingOptionsValuesEnum.PRICE_ASC, + }, + { + label: 'Sort: Price from high to low', + value: SortingOptionsValuesEnum.PRICE_DESC, + }, +]; diff --git a/modules/catalog/category/composables/useFacet/useFacet.ts b/modules/catalog/category/composables/useFacet/useFacet.ts new file mode 100644 index 0000000..a957033 --- /dev/null +++ b/modules/catalog/category/composables/useFacet/useFacet.ts @@ -0,0 +1,78 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { ProductInterface } from '~/modules/GraphQL/types'; +import type { SortingOption } from '~/modules/catalog/category/composables/useFacet/sortingOptions'; + +/** + * The {@link useFacet} search params data structure + */ +export interface FacetSearchParams { + categorySlug?: string; + rootCatSlug?: string; + term?: string; + page?: number; + itemsPerPage?: number; + sort?: string; + filters?: Record; + metadata?: any; + [x: string]: any; +} + +/** + * The {@link useFacet} search result data structure + */ +export interface SearchResultData { + items: ProductInterface[], + total: number, + availableSortingOptions: SortingOption[], + perPageOptions: number[], + itemsPerPage: number +} + +/** + * The {@link useFacet} search results contain the parameters used to filter and + * the obtained data that matches it. + */ +export interface UseFacetSearchResult { + /** The data obtained in the search. */ + data: SearchResultData; + /** The parameters used to filter the search. */ + input: FacetSearchParams; +} + +/** + * The {@link useFacet} error object. The properties values' are the errors + * thrown by its methods. + */ +export interface UseFacetErrors { + /** Error when searching with facets fails, otherwise is `null`. */ + search: Error | null; +} + +/** The params received by {@link useFacet}'s `search` method. */ +export type UseFacetSearchParams = ComposableFunctionArgs; + +/** + * Data and methods returned from the {@link useFacet} composable. + */ +export interface UseFacetInterface { + /** + * Contains errors from any of the composable methods. + * + * Read {@link UseFacetErrors} documentation for more details. + */ + error: DeepReadonly>; + + /** + * Contains the search results from the last search. + * + * Read {@link UseFacetSearchResult} documentation for more details. + */ + result: Ref; + + /** Indicates whether any of the composable methods is in progress. */ + loading: Readonly>; + + /** Searches for products using facets. */ + search(params?: UseFacetSearchParams): Promise; +} diff --git a/modules/catalog/category/config/FiltersConfig.ts b/modules/catalog/category/config/FiltersConfig.ts new file mode 100644 index 0000000..3b7b8dd --- /dev/null +++ b/modules/catalog/category/config/FiltersConfig.ts @@ -0,0 +1,24 @@ +import RendererTypesEnum from '~/modules/catalog/category/components/filters/renderer/RendererTypesEnum'; +import config, { FilterTypeEnum } from './config'; + +export interface FilterConfigInterface { + attrCode: string; + component?: RendererTypesEnum; + type?: FilterTypeEnum; + disabled?: boolean +} + +export const getFilterConfig = (attrCode: string): FilterConfigInterface => { + const defaultCfg = { + attrCode, + type: FilterTypeEnum.CHECKBOX, + component: RendererTypesEnum.CHECKBOX, + disabled: false, + }; + + const find = config().find((cfgItem) => cfgItem.attrCode === attrCode) ?? {}; + return { ...defaultCfg, ...find }; +}; + +export const getDisabledFilters = () => config().filter((filter) => filter.disabled).map((filter) => filter.attrCode); +export const isFilterEnabled = (attrCode: string) => config().find((attr) => attr.attrCode === attrCode && !attr.disabled); diff --git a/modules/catalog/category/config/__tests__/filtersConfig.spec.ts b/modules/catalog/category/config/__tests__/filtersConfig.spec.ts new file mode 100644 index 0000000..23eb417 --- /dev/null +++ b/modules/catalog/category/config/__tests__/filtersConfig.spec.ts @@ -0,0 +1,84 @@ +import config, { FilterTypeEnum } from '~/modules/catalog/category/config/config'; +import RendererTypesEnum from '~/modules/catalog/category/components/filters/renderer/RendererTypesEnum'; +import { + getFilterConfig, getDisabledFilters, isFilterEnabled, +} from '../FiltersConfig'; + +jest.mock('~/modules/catalog/category/config/config'); + +const defaultFiltersConfig = [ + { + attrCode: 'price', + type: FilterTypeEnum.RADIO, + component: RendererTypesEnum.RADIO, + }, + { + attrCode: 'size', + }, + { + attrCode: 'color', + type: FilterTypeEnum.SWATCH_COLOR, + component: RendererTypesEnum.SWATCH_COLOR, + }, + { + attrCode: 'new', + type: FilterTypeEnum.RADIO, + component: RendererTypesEnum.YES_NO, + }, + { + attrCode: 'sale', + type: FilterTypeEnum.RADIO, + component: RendererTypesEnum.YES_NO, + disabled: true, + }, +]; +describe('FiltersConfig', () => { + it('getFilterConfig with a configured attribute', () => { + (config as jest.Mock).mockReturnValueOnce(defaultFiltersConfig); + const result = getFilterConfig('sale'); + const expected = { + attrCode: 'sale', + type: FilterTypeEnum.RADIO, + component: RendererTypesEnum.YES_NO, + disabled: true, + }; + expect(result).toEqual(expected); + }); + + it('getFilterConfig with a partially configured attribute', () => { + (config as jest.Mock).mockReturnValueOnce(defaultFiltersConfig); + const result = getFilterConfig('size'); + const expected = { + attrCode: 'size', + type: FilterTypeEnum.CHECKBOX, + component: RendererTypesEnum.CHECKBOX, + disabled: false, + }; + expect(result).toEqual(expected); + }); + + it('getFilterConfig with a not-configured attribute (default)', () => { + (config as jest.Mock).mockReturnValueOnce(defaultFiltersConfig); + const result = getFilterConfig('ANYTHING'); + const expected = { + attrCode: 'ANYTHING', + type: FilterTypeEnum.CHECKBOX, + component: RendererTypesEnum.CHECKBOX, + disabled: false, + }; + expect(result).toEqual(expected); + }); + + it('getDisabledFilters', () => { + (config as jest.Mock).mockReturnValueOnce(defaultFiltersConfig); + const result = getDisabledFilters(); + const expected = ['sale']; + expect(result).toEqual(expected); + }); + + it('isFilterEnabled', () => { + (config as jest.Mock).mockReturnValue(defaultFiltersConfig); + expect(isFilterEnabled('invalid')).toBeFalsy(); + expect(isFilterEnabled('size')).toBeTruthy(); + }); +}); diff --git a/modules/catalog/category/config/config.ts b/modules/catalog/category/config/config.ts new file mode 100644 index 0000000..eb65f42 --- /dev/null +++ b/modules/catalog/category/config/config.ts @@ -0,0 +1,54 @@ +import RendererTypesEnum from '~/modules/catalog/category/components/filters/renderer/RendererTypesEnum'; +import type { FilterConfigInterface } from '~/modules/catalog/category/config/FiltersConfig'; + +export enum FilterTypeEnum { + RADIO = 'radio', + CHECKBOX = 'checkbox', + SWATCH_COLOR = 'swatch_color', + YES_NO = 'yes_no', +} + +/** + * Override this to add/modify filters renderers and data + * + * @attrCode: Magento attribute code + * @type: internal filter type + * @component: filter renderer component + * @disabled: flag to disable filter on the front; disabled filter will be not rendered + */ +export default function config(): FilterConfigInterface[] { + return [ + { + attrCode: 'price', + type: FilterTypeEnum.RADIO, + component: RendererTypesEnum.RADIO, + }, + { + attrCode: 'size', + }, + { + attrCode: 'material', + }, + { + attrCode: 'strap_bags', + }, + { + attrCode: 'style_bottom', + }, + { + attrCode: 'color', + type: FilterTypeEnum.SWATCH_COLOR, + component: RendererTypesEnum.SWATCH_COLOR, + }, + { + attrCode: 'new', + type: FilterTypeEnum.YES_NO, + component: RendererTypesEnum.YES_NO, + }, + { + attrCode: 'sale', + type: FilterTypeEnum.YES_NO, + component: RendererTypesEnum.YES_NO, + }, + ]; +} diff --git a/modules/catalog/category/enums/displayModesEnum.ts b/modules/catalog/category/enums/displayModesEnum.ts new file mode 100644 index 0000000..428f36e --- /dev/null +++ b/modules/catalog/category/enums/displayModesEnum.ts @@ -0,0 +1,7 @@ +const displayModesEnum = { + PRODUCTS: 'PRODUCTS', + PAGE: 'PAGE', + PRODUCTS_AND_PAGE: 'PRODUCTS_AND_PAGE', +}; + +export default displayModesEnum; diff --git a/modules/catalog/category/getters/facetGetters.ts b/modules/catalog/category/getters/facetGetters.ts new file mode 100644 index 0000000..305f16c --- /dev/null +++ b/modules/catalog/category/getters/facetGetters.ts @@ -0,0 +1,50 @@ +import { perPageOptions } from '~/modules/catalog/category/composables/useFacet/perPageOptions'; +import type { ProductInterface } from '~/modules/GraphQL/types'; +import type { Pagination } from '~/composables/types'; +import type { SortingModel } from '~/modules/catalog/category/composables/useFacet/sortingOptions'; +import type { UseFacetSearchResult } from '~/modules/catalog/category/composables/useFacet/useFacet'; + +export interface FacetsGetters { + getSortOptions: (searchData: UseFacetSearchResult) => SortingModel; + getProducts: (searchData: UseFacetSearchResult) => ProductInterface[]; + getPagination: (searchData: UseFacetSearchResult) => Pagination; +} + +const facetGetters: FacetsGetters = { + getSortOptions(searchData) { + if (!searchData || !searchData.data || !searchData.data.availableSortingOptions) { + return { + options: [], + selected: '', + } as SortingModel; + } + + return { + options: searchData.data.availableSortingOptions, + selected: searchData.input.sort, + }; + }, + getProducts(searchData) { + if (!searchData || !searchData.data || !searchData.data.items) { + return []; + } + return searchData.data.items; + }, + getPagination(searchData) { + 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: perPageOptions, + }; + }, +}; + +export default facetGetters; diff --git a/modules/catalog/category/helpers/__tests__/findActiveCategory.spec.ts b/modules/catalog/category/helpers/__tests__/findActiveCategory.spec.ts new file mode 100644 index 0000000..3ed2b26 --- /dev/null +++ b/modules/catalog/category/helpers/__tests__/findActiveCategory.spec.ts @@ -0,0 +1,62 @@ +import { findActiveCategory } from '~/modules/catalog/category/helpers/findActiveCategory'; +import categoryTreeData from '~/tests/unit/mocks/categoryTreeDataMock'; + +describe('Find active category', () => { + const sharedMatch = { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }; + + it('find category node by default key', () => { + const result = findActiveCategory(categoryTreeData[0], 'women'); + + expect(result).toMatchObject(sharedMatch); + }); + + it('find category node by default key with overlapping keys value (women, men)', () => { + const result = findActiveCategory(categoryTreeData[0], 'men'); + + expect(result).toMatchObject({ + is_anchor: 0, + name: 'Men', + position: 3, + product_count: 0, + uid: 'MTE=', + url_path: 'men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }); + }); + + it('find category node by custom key', () => { + const result = findActiveCategory(categoryTreeData[0], 'MjA=', 'uid'); + + expect(result).toMatchObject(sharedMatch); + }); + + it('returns null if there is no match', () => { + const result = findActiveCategory(categoryTreeData[0], 'not_found'); + + expect(result).toBeNull(); + }); + + it('returns null if findBy key does not exists', () => { + // @ts-expect-error intentional breach of typedefs + const result = findActiveCategory(categoryTreeData[0], 'woman', 'invalid_key'); + + expect(result).toBeNull(); + }); + + it('correctly returns child category', () => { + const result = findActiveCategory(categoryTreeData[0], 'women/tops-women'); + expect(result).toStrictEqual(categoryTreeData[0].children[1].children[0]); + }); +}); diff --git a/modules/catalog/category/helpers/__tests__/findCategoryAncestor.spec.ts b/modules/catalog/category/helpers/__tests__/findCategoryAncestor.spec.ts new file mode 100644 index 0000000..75371fb --- /dev/null +++ b/modules/catalog/category/helpers/__tests__/findCategoryAncestor.spec.ts @@ -0,0 +1,26 @@ +import { findCategoryAncestors } from '~/modules/catalog/category/helpers/findCategoryAncestors'; +import categoryTreeData from '~/tests/unit/mocks/categoryTreeDataMock'; + +describe('findCategoryAncestors', () => { + it('if "node" is equal to "toFind" then return starting array', () => { + const result = findCategoryAncestors(categoryTreeData[0], categoryTreeData[0], categoryTreeData); + expect(result).toEqual(categoryTreeData); + }); + + it('returns an array of preceding toFinds in a proper order', () => { + const result = findCategoryAncestors(categoryTreeData[0], categoryTreeData[0].children[1], categoryTreeData); + + expect(result).toEqual( + expect.arrayContaining([ + expect.objectContaining({ uid: 'Mg==' }), + expect.objectContaining({ uid: 'MjA=' }), + ]), + ); + }); + + it('returns null if there are no ancestors', () => { + const result = findCategoryAncestors(categoryTreeData[0].children[1], categoryTreeData[0], categoryTreeData); + + expect(result).toBeNull(); + }); +}); diff --git a/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts b/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts new file mode 100644 index 0000000..580bbf7 --- /dev/null +++ b/modules/catalog/category/helpers/__tests__/useTraverseCategory.spec.ts @@ -0,0 +1,63 @@ +import { useTraverseCategory } from '~/modules/catalog/category/helpers/useTraverseCategory'; +import { useCategoryStore } from '~/modules/catalog/category/stores/category'; +import categoryTreeData from '~/tests/unit/mocks/categoryTreeDataMock'; + +const mockUseCategoryStore = { categories: categoryTreeData[0], load: jest.fn() }; + +jest.mock('~/modules/catalog/category/stores/category', () => { + const originalModule = jest.requireActual('~/modules/catalog/category/stores/category'); + + return { + ...originalModule, + useCategoryStore: jest.fn(() => (mockUseCategoryStore)), + }; +}); + +jest.mock('@nuxtjs/composition-api', () => { + const originalModule = jest.requireActual('@nuxtjs/composition-api'); + + return { + ...originalModule, + useContext: jest.fn(() => ({ app: { localePath: (suffix: unknown) => `/default${suffix}` } })), + useRoute: jest.fn(() => ({ value: { path: '/default/what-is-new.html' } })), + }; +}); + +describe('UseTraverseCategory', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('categoryTree() returns data from the store', () => { + const { categoryTree } = useTraverseCategory(); + expect(useCategoryStore).toBeCalledTimes(1); + expect(categoryTree.value).toEqual(categoryTreeData[0]); + }); + + it('activeCategory() returns activeCategory', () => { + const { activeCategory } = useTraverseCategory(); + expect(useCategoryStore).toBeCalledTimes(1); + expect(activeCategory.value).toStrictEqual(categoryTreeData[0].children[0]); + }); + + it('isCategoryTreeLoaded() returns true if store has data', () => { + const { isCategoryTreeLoaded } = useTraverseCategory(); + expect(useCategoryStore).toBeCalledTimes(1); + expect(isCategoryTreeLoaded.value).toEqual(true); + }); + + it('loadCategoryTree() executes "load" on the store', () => { + const { loadCategoryTree } = useTraverseCategory(); + loadCategoryTree(); + expect(mockUseCategoryStore.load).toBeCalledTimes(1); + }); + + it('factory returns well defined object', () => { + const traverseCategory = useTraverseCategory(); + expect(traverseCategory).toHaveProperty('activeCategory'); + expect(traverseCategory).toHaveProperty('categoryAncestors'); + expect(traverseCategory).toHaveProperty('categoryTree'); + expect(traverseCategory).toHaveProperty('loadCategoryTree'); + expect(traverseCategory).toHaveProperty('isCategoryTreeLoaded'); + }); +}); diff --git a/modules/catalog/category/helpers/findActiveCategory.ts b/modules/catalog/category/helpers/findActiveCategory.ts new file mode 100644 index 0000000..d360280 --- /dev/null +++ b/modules/catalog/category/helpers/findActiveCategory.ts @@ -0,0 +1,19 @@ +import findDeep from 'deepdash/findDeep'; +import { CategoryTree } from '~/modules/GraphQL/types'; + +/** + * Traverse Category Tree to find and return active category by "findBy" param + * + * @param categoryTree CategoryTree + * @param toFind string + * @param findBy string (default = url_path) + * + * @return CategoryTree + */ +export function findActiveCategory(categoryTree: CategoryTree, toFind: string, findBy: keyof CategoryTree = 'url_path'): CategoryTree | null { + const categories = categoryTree?.children; + + return categories + ? findDeep(categories, (value: string, key: string) => key === findBy && value === toFind)?.parent ?? null + : null; +} diff --git a/modules/catalog/category/helpers/findCategoryAncestors.ts b/modules/catalog/category/helpers/findCategoryAncestors.ts new file mode 100644 index 0000000..ffef0ca --- /dev/null +++ b/modules/catalog/category/helpers/findCategoryAncestors.ts @@ -0,0 +1,28 @@ +import { CategoryTree } from '~/modules/GraphQL/types'; + +/* + * Finds each category preceding `toFind` in the category tree + * Uses a modified Breadth First Search algorithm to tell you if the toFind node exists how to get to it + * + * @param node CategoryTree + * @param toFind CategoryTree + * @param startingArray CategoryTree[] + * + * @returns Flat array of categories ([level1Obj, level2Obj, level3Obj]) + */ +export function findCategoryAncestors(node: CategoryTree, toFind: CategoryTree, startingArray: CategoryTree[] = []) + : CategoryTree[] | null { + if (node === toFind) { + return startingArray; + } + + if (node.children && node.children.length > 0) { + for (let i = 0; i < node.children.length; i += 1) { + const subnode = node.children[i]; + const result = findCategoryAncestors(subnode, toFind, [...startingArray, subnode]); + if (result) return result; + } + } + + return null; +} diff --git a/modules/catalog/category/helpers/useTraverseCategory.ts b/modules/catalog/category/helpers/useTraverseCategory.ts new file mode 100644 index 0000000..7a1e637 --- /dev/null +++ b/modules/catalog/category/helpers/useTraverseCategory.ts @@ -0,0 +1,40 @@ +import { + computed, useContext, useRoute, +} from '@nuxtjs/composition-api'; +import { useCategoryStore } from '~/modules/catalog/category/stores/category'; +import { findActiveCategory } from '~/modules/catalog/category/helpers/findActiveCategory'; +import { findCategoryAncestors } from '~/modules/catalog/category/helpers/findCategoryAncestors'; + +/** + * Logic for finding the current product category and its parent and grandparent categories (ancestors) + */ +export function useTraverseCategory() { + const context = useContext(); + const categoryStore = useCategoryStore(); + const route = useRoute(); + + const categoryTree = computed(() => categoryStore.categories); + const isCategoryTreeLoaded = computed(() => categoryStore.categories !== null); + const loadCategoryTree = () => categoryStore.load(); + 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('/'), '') + .replace(/^\//, '') + .replace('.html', ''); + + return categoryTree.value === null ? null : findActiveCategory(categoryTree.value, urlPathToFind); + }); + + const categoryAncestors = computed(() => (activeCategory.value === null + ? [] + : findCategoryAncestors(categoryTree.value, activeCategory.value)) ?? []); + + return { + activeCategory, + categoryAncestors, + categoryTree, + loadCategoryTree, + isCategoryTreeLoaded, + }; +} diff --git a/modules/catalog/category/stores/category.ts b/modules/catalog/category/stores/category.ts new file mode 100644 index 0000000..3cf4c6f --- /dev/null +++ b/modules/catalog/category/stores/category.ts @@ -0,0 +1,28 @@ +import { defineStore } from 'pinia'; +import { CategoryResult } from '~/composables'; +import categoryListGql from './graphql/categoryList.gql'; + +interface CategoryState { + rawCategories: CategoryResult | null +} + +export const useCategoryStore = defineStore('category', { + state: (): CategoryState => ({ + rawCategories: null, + }), + actions: { + async load() { + const { data }: { data: { categories?: CategoryResult } } = await this.$nuxt.app.$vsf.$magento.api.customQuery({ query: categoryListGql }); + this.rawCategories = data?.categories ?? null; + }, + }, + getters: { + categories(state) { + if (state.rawCategories === null) { + return null; + } + + return state.rawCategories?.items[0]; + }, + }, +}); diff --git a/modules/catalog/category/stores/graphql/categoryList.gql.ts b/modules/catalog/category/stores/graphql/categoryList.gql.ts new file mode 100644 index 0000000..aa5582c --- /dev/null +++ b/modules/catalog/category/stores/graphql/categoryList.gql.ts @@ -0,0 +1,32 @@ +const fragmentCategory = ` + fragment CategoryFields on CategoryTree { + is_anchor + name + position + product_count + uid + url_path + url_suffix + include_in_menu + } +`; + +export default ` + query categoryList { + categories { + items { + ...CategoryFields + children { + ...CategoryFields + children { + ...CategoryFields + children { + ...CategoryFields + } + } + } + } + } + } + ${fragmentCategory} +`; diff --git a/modules/catalog/category/types.d.ts b/modules/catalog/category/types.d.ts new file mode 100644 index 0000000..bcb43be --- /dev/null +++ b/modules/catalog/category/types.d.ts @@ -0,0 +1,219 @@ +import { + Assets, + Breadcrumb, + CmsBlock, FilterEqualTypeInput, FilterMatchTypeInput, + ProductAttributeSortInput, ProductInterface, + RoutableInterface, SearchResultPageInfo, + UrlRewriteEntityTypeEnum, + InputMaybe, + Maybe, + Scalars, + CategorySearchQuery, +} from '~/modules/GraphQL/types'; + +export type Category = CategoryTree | CategorySearchQuery['categoryList'][0]; + +export interface Categories { + /** The payment method assets */ + asset_urls?: Maybe>>; + /** The payment method identifier */ + identifier: Scalars['String']; + /** The payment method name */ + name: Scalars['String']; +} +/** CategoryFilterInput defines the filters to be used in the search. A filter contains at least one attribute, a comparison operator, and the value that is being searched for. */ +export interface CategoryFilterInput { + /** Filter by the unique category ID for a `CategoryInterface` object. */ + category_uid?: InputMaybe; + /** Deprecated: use 'category_uid' to filter uniquely identifiers of categories. */ + ids?: InputMaybe; + /** Filter by the display name of the category. */ + name?: InputMaybe; + /** Filter by the unique parent category ID for a `CategoryInterface` object. */ + parent_category_uid?: InputMaybe; + /** Filter by the unique parent category ID for a `CategoryInterface` object. */ + parent_id?: InputMaybe; + /** Filter by the part of the URL that identifies the category. */ + url_key?: InputMaybe; + /** Filter by the URL path for the category. */ + url_path?: InputMaybe; +} +/** CategoryInterface contains the full set of attributes that can be returned in a category search. */ +export interface CategoryInterface { + available_sort_by?: Maybe>>; + /** Breadcrumbs, parent categories info. */ + breadcrumbs?: Maybe>>; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Categories' is enabled */ + canonical_url?: Maybe; + children_count?: Maybe; + /** category CMS Block. */ + cms_block?: Maybe; + /** + * Timestamp indicating when the category was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + custom_layout_update_file?: Maybe; + /** The attribute to use for sorting. */ + default_sort_by?: Maybe; + /** An optional description of the category. */ + description?: Maybe; + display_mode?: Maybe; + filter_price_range?: Maybe; + /** + * An ID that uniquely identifies the category. + * @deprecated Use the `uid` argument instead. + */ + id?: Maybe; + image?: Maybe; + include_in_menu?: Maybe; + is_anchor?: Maybe; + landing_page?: Maybe; + /** Indicates the depth of the category within the tree. */ + level?: Maybe; + meta_description?: Maybe; + meta_keywords?: Maybe; + meta_title?: Maybe; + /** The display name of the category. */ + name?: Maybe; + /** category Path. */ + path?: Maybe; + /** category path in store. */ + path_in_store?: Maybe; + /** The position of the category relative to other categories at the same level in tree. */ + position?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + product_count?: Maybe; + /** The list of products assigned to the category. */ + products?: Maybe; + /** The unique ID for a `CategoryInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the category was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** The url key assigned to the category. */ + url_key?: Maybe; + /** The url path assigned to the category. */ + url_path?: Maybe; + /** The part of the category URL that is appended after the url key */ + url_suffix?: Maybe; +} +/** CategoryInterface contains the full set of attributes that can be returned in a category search. */ +export interface CategoryInterfaceProductsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; + sort?: InputMaybe; +} +/** The category products object returned in the category query. */ +export interface CategoryProducts { + /** An array of products that are assigned to the category. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + total_count?: Maybe; +} +/** A collection of CategoryTree objects and pagination information. */ +export interface CategoryResult { + /** A list of categories that match the filter criteria. */ + items?: Maybe>>; + /** An object that includes the page_info and currentPage values specified in the query. */ + page_info?: Maybe; + /** The total number of categories that match the criteria. */ + total_count?: Maybe; +} + +export interface AgnosticBreadcrumb { + text: string; + link: string; +} + +export interface FacetInterface { + type: string; + id: string; + value: any; + attrName?: string; + count?: number; + selected?: boolean; + metadata?: any; +} + +/** category tree implementation */ +export interface CategoryTree extends CategoryInterface, RoutableInterface { + available_sort_by?: Maybe>>; + /** Breadcrumbs, parent categories info. */ + breadcrumbs?: Maybe>>; + /** Relative canonical URL. This value is returned only if the system setting 'Use Canonical Link Meta Tag For Categories' is enabled */ + canonical_url?: Maybe; + /** Child categories tree. */ + children?: Maybe>>; + children_count?: Maybe; + /** category CMS Block. */ + cms_block?: Maybe; + /** + * Timestamp indicating when the category was created. + * @deprecated The field should not be used on the storefront. + */ + created_at?: Maybe; + custom_layout_update_file?: Maybe; + /** The attribute to use for sorting. */ + default_sort_by?: Maybe; + /** An optional description of the category. */ + description?: Maybe; + display_mode?: Maybe; + filter_price_range?: Maybe; + /** + * An ID that uniquely identifies the category. + * @deprecated Use the `uid` argument instead. + */ + id?: Maybe; + image?: Maybe; + include_in_menu?: Maybe; + is_anchor?: Maybe; + landing_page?: Maybe; + /** Indicates the depth of the category within the tree. */ + level?: Maybe; + meta_description?: Maybe; + meta_keywords?: Maybe; + meta_title?: Maybe; + /** The display name of the category. */ + name?: Maybe; + /** category Path. */ + path?: Maybe; + /** category path in store. */ + path_in_store?: Maybe; + /** The position of the category relative to other categories at the same level in tree. */ + position?: Maybe; + /** The number of products in the category that are marked as visible. By default, in complex products, parent products are visible, but their child products are not. */ + product_count?: Maybe; + /** The list of products assigned to the category. */ + products?: Maybe; + /** Contains 0 when there is no redirect error. A value of 301 indicates the URL of the requested resource has been changed permanently, while a value of 302 indicates a temporary redirect */ + redirect_code: Scalars['Int']; + /** The internal relative URL. If the specified URL is a redirect, the query returns the redirected URL, not the original */ + relative_url?: Maybe; + /** One of PRODUCT, CATEGORY, or CMS_PAGE. */ + type?: Maybe; + /** The unique ID for a `CategoryInterface` object. */ + uid: Scalars['ID']; + /** + * Timestamp indicating when the category was updated. + * @deprecated The field should not be used on the storefront. + */ + updated_at?: Maybe; + /** The url key assigned to the category. */ + url_key?: Maybe; + /** The url path assigned to the category. */ + url_path?: Maybe; + /** The part of the category URL that is appended after the url key */ + url_suffix?: Maybe; +} + +/** category tree implementation */ +export interface CategoryTreeProductsArgs { + currentPage?: InputMaybe; + pageSize?: InputMaybe; + sort?: InputMaybe; +} diff --git a/modules/catalog/index.ts b/modules/catalog/index.ts new file mode 100644 index 0000000..e957a02 --- /dev/null +++ b/modules/catalog/index.ts @@ -0,0 +1,5 @@ +import type { Module } from '@nuxt/types'; + +const nuxtModule : Module = function categoryModule() {}; + +export default nuxtModule; diff --git a/modules/catalog/pages/category.vue b/modules/catalog/pages/category.vue new file mode 100644 index 0000000..1dc0e87 --- /dev/null +++ b/modules/catalog/pages/category.vue @@ -0,0 +1,422 @@ + + + + + diff --git a/modules/catalog/pages/product.vue b/modules/catalog/pages/product.vue new file mode 100644 index 0000000..0013c32 --- /dev/null +++ b/modules/catalog/pages/product.vue @@ -0,0 +1,172 @@ + + + diff --git a/modules/catalog/pricing/__tests__/getConfigurableProductPriceCommand.spec.ts b/modules/catalog/pricing/__tests__/getConfigurableProductPriceCommand.spec.ts new file mode 100644 index 0000000..188182d --- /dev/null +++ b/modules/catalog/pricing/__tests__/getConfigurableProductPriceCommand.spec.ts @@ -0,0 +1,15 @@ +import { getConfigurableProductPriceCommand } from '~/modules/catalog/pricing/getConfigurableProductPriceCommand'; +import ConfigurableProductWithoutSelectionMock from '~/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithoutSelection.mock'; +import ConfigurableProductWithSelectionMock from '~/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithSelection.mock'; + +describe('getConfigurableProductPriceCommand', () => { + it('Resolve price from the parent if no variant is selected', () => { + // @ts-expect-error for the simplified mock structure + expect(getConfigurableProductPriceCommand(ConfigurableProductWithoutSelectionMock)).toEqual(20); + }); + + it('Resolve price from the variant if variant is selected', () => { + // @ts-expect-error for the simplified mock structure + expect(getConfigurableProductPriceCommand(ConfigurableProductWithSelectionMock)).toEqual(45); + }); +}); diff --git a/modules/catalog/pricing/__tests__/getGroupedProductPriceCommand.spec.ts b/modules/catalog/pricing/__tests__/getGroupedProductPriceCommand.spec.ts new file mode 100644 index 0000000..067188b --- /dev/null +++ b/modules/catalog/pricing/__tests__/getGroupedProductPriceCommand.spec.ts @@ -0,0 +1,9 @@ +import { getGroupedProductPriceCommand } from '~/modules/catalog/pricing/getGroupedProductPriceCommand'; +import GroupedProductMock from '~/modules/catalog/pricing/__tests__/mock/GroupedProduct.mock'; + +describe('getGroupedProductPriceCommand', () => { + it('Resolve price from the parent if no variant is selected', () => { + // @ts-expect-error for the simplified mock structure + expect(getGroupedProductPriceCommand(GroupedProductMock)).toEqual(52); + }); +}); diff --git a/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithSelection.mock.ts b/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithSelection.mock.ts new file mode 100644 index 0000000..81cc87b --- /dev/null +++ b/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithSelection.mock.ts @@ -0,0 +1,70 @@ +export default { + __typename: 'ConfigurableProduct', + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 20, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 20, + }, + }, + }, + configurable_product_options_selection: { + __typename: 'ConfigurableProductOptionsSelection', + variant: { + __typename: 'SimpleProduct', + uid: 'MjAzOQ==', + sku: 'WSH12-30-Red', + name: 'Erika Running Short-30-Red', + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + }, + }, + }, + }, +}; diff --git a/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithoutSelection.mock.ts b/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithoutSelection.mock.ts new file mode 100644 index 0000000..6c16caa --- /dev/null +++ b/modules/catalog/pricing/__tests__/mock/ConfigurableProductWithoutSelection.mock.ts @@ -0,0 +1,35 @@ +export default { + __typename: 'ConfigurableProduct', + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 45, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 20, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 20, + }, + }, + }, + configurable_product_options_selection: { + variant: null, + }, +}; diff --git a/modules/catalog/pricing/__tests__/mock/GroupedProduct.mock.ts b/modules/catalog/pricing/__tests__/mock/GroupedProduct.mock.ts new file mode 100644 index 0000000..15f0adc --- /dev/null +++ b/modules/catalog/pricing/__tests__/mock/GroupedProduct.mock.ts @@ -0,0 +1,142 @@ +export default { + __typename: 'GroupedProduct', + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + }, + }, + items: [ + { + __typename: 'GroupedProductItem', + position: 0, + qty: 1, + product: { + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 14, + }, + }, + }, + }, + }, + { + __typename: 'GroupedProductItem', + position: 1, + qty: 1, + product: { + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 17, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 17, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 17, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 17, + }, + }, + }, + }, + }, + { + __typename: 'GroupedProductItem', + position: 2, + qty: 1, + product: { + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 21, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 21, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 21, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 21, + }, + }, + }, + }, + }, + ], +}; diff --git a/modules/catalog/pricing/__tests__/usePrice.spec.ts b/modules/catalog/pricing/__tests__/usePrice.spec.ts new file mode 100644 index 0000000..4bf2f3c --- /dev/null +++ b/modules/catalog/pricing/__tests__/usePrice.spec.ts @@ -0,0 +1,48 @@ +import { usePrice } from '~/modules/catalog/pricing/usePrice'; +import { useApi } from '~/composables/useApi'; +import getPricesQuery from '~/modules/catalog/pricing/getPricesQuery.gql'; + +jest.mock('~/composables/useApi', () => ({ + useApi: jest.fn(), +})); + +describe('usePrice', () => { + it('Factory returns required methods', () => { + const actual = usePrice(); + expect(actual).toHaveProperty('getPricesBySku'); + expect(actual).toHaveProperty('getPrices'); + }); + + it('getPrices', async () => { + const { getPrices } = usePrice(); + const pageSize = 20; + const currentPage = 1; + const variables = { filter: { sku: { eq: 'test' } }, pageSize, currentPage }; + const expectedResult = { items: [] }; + const useApiMock = { query: jest.fn(() => (expectedResult)) }; + + (useApi as jest.Mock).mockReturnValue(useApiMock); + const actualResult = await getPrices(variables); + + expect(useApiMock.query).toBeCalledTimes(1); + expect(useApiMock.query).toBeCalledWith(getPricesQuery, variables); + expect(expectedResult).toMatchObject(actualResult); + }); + + it('getPricesBySku', async () => { + const { getPricesBySku } = usePrice(); + const pageSize = 20; + const currentPage = 1; + const skus = ['sku1', 'sku2']; + const expectedVariables = { filter: { sku: { in: skus } }, pageSize, currentPage }; + const expectedResult = { items: [] }; + const useApiMock = { query: jest.fn(() => (expectedResult)) }; + + (useApi as jest.Mock).mockReturnValue(useApiMock); + const actualResult = await getPricesBySku(skus, pageSize, currentPage); + + expect(useApiMock.query).toBeCalledTimes(1); + expect(useApiMock.query).toBeCalledWith(getPricesQuery, expectedVariables); + expect(expectedResult).toMatchObject(actualResult); + }); +}); diff --git a/modules/catalog/pricing/getConfigurableProductPriceCommand.ts b/modules/catalog/pricing/getConfigurableProductPriceCommand.ts new file mode 100644 index 0000000..c101c47 --- /dev/null +++ b/modules/catalog/pricing/getConfigurableProductPriceCommand.ts @@ -0,0 +1,9 @@ +import type { ConfigurableProduct } from '~/modules/GraphQL/types'; +import { getPrice as getProductPrice } from '~/modules/catalog/product/getters/productGetters'; + +export function getConfigurableProductPriceCommand(product: ConfigurableProduct): number { + const priceProduct = product?.configurable_product_options_selection?.variant ?? product; + const { regular } = getProductPrice(priceProduct); + + return regular; +} diff --git a/modules/catalog/pricing/getConfigurableProductSpecialPriceCommand.ts b/modules/catalog/pricing/getConfigurableProductSpecialPriceCommand.ts new file mode 100644 index 0000000..209a335 --- /dev/null +++ b/modules/catalog/pricing/getConfigurableProductSpecialPriceCommand.ts @@ -0,0 +1,9 @@ +import type { ConfigurableProduct } from '~/modules/GraphQL/types'; +import { getPrice as getProductPrice } from '~/modules/catalog/product/getters/productGetters'; + +export function getConfigurableProductSpecialPriceCommand(product: ConfigurableProduct): number { + const priceProduct = product?.configurable_product_options_selection?.variant ?? product; + const { special } = getProductPrice(priceProduct); + + return special; +} diff --git a/modules/catalog/pricing/getGroupedProductPriceCommand.ts b/modules/catalog/pricing/getGroupedProductPriceCommand.ts new file mode 100644 index 0000000..fbd69ee --- /dev/null +++ b/modules/catalog/pricing/getGroupedProductPriceCommand.ts @@ -0,0 +1,15 @@ +import type { GroupedProduct, ProductInterface } from '~/modules/GraphQL/types'; +import { getPrice as getProductPrice } from '~/modules/catalog/product/getters/productGetters'; + +export function getGroupedProductPriceCommand(product: GroupedProduct): number { + const evalProductPrice = (p: ProductInterface) => { + const { regular, special } = getProductPrice(p); + + return regular > special && special !== null ? special : regular; + }; + + return product.items?.reduce( + (acc, curr) => curr.qty * evalProductPrice(curr.product) + acc, + 0, + ) ?? 0; +} diff --git a/modules/catalog/pricing/getPricesQuery.gql.ts b/modules/catalog/pricing/getPricesQuery.gql.ts new file mode 100644 index 0000000..771ec35 --- /dev/null +++ b/modules/catalog/pricing/getPricesQuery.gql.ts @@ -0,0 +1,31 @@ +export default ` + query productsList($search: String = "", $filter: ProductAttributeFilterInput, $pageSize: Int = 20, $currentPage: Int = 1, $sort: ProductAttributeSortInput) { + products(search: $search, filter: $filter, pageSize: $pageSize, currentPage: $currentPage, sort: $sort) { + items { + sku + price_range { + maximum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + minimum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + } + } + } + } +`; diff --git a/modules/catalog/pricing/usePrice.ts b/modules/catalog/pricing/usePrice.ts new file mode 100644 index 0000000..f1f0340 --- /dev/null +++ b/modules/catalog/pricing/usePrice.ts @@ -0,0 +1,28 @@ +import { useApi } from '~/composables/useApi'; +import getPricesQuery from '~/modules/catalog/pricing/getPricesQuery.gql'; +import { PriceRange } from '~/modules/GraphQL/types'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; + +export interface PriceItem { + price_range: PriceRange; + sku: String; +} + +export interface PriceItems { + items: PriceItem[] +} + +export const usePrice = () => { + const getPrices = async (variables: GetProductSearchParams): Promise => { + const { query } = useApi(); + const { data } = await query<{ products: PriceItems }>(getPricesQuery, variables); + + return data?.products ?? { items: [] }; + }; + + const getPricesBySku = async (skus: string[], pageSize = 20, currentPage = 1): Promise => getPrices( + { filter: { sku: { in: skus } }, pageSize, currentPage }, + ); + + return { getPricesBySku, getPrices }; +}; diff --git a/components/ProductAddReviewForm.vue b/modules/catalog/product/components/ProductAddReviewForm.vue similarity index 65% rename from components/ProductAddReviewForm.vue rename to modules/catalog/product/components/ProductAddReviewForm.vue index 2e1ae87..9debfa4 100644 --- a/components/ProductAddReviewForm.vue +++ b/modules/catalog/product/components/ProductAddReviewForm.vue @@ -1,13 +1,9 @@ - - diff --git a/modules/catalog/product/components/ProductsCarousel.vue b/modules/catalog/product/components/ProductsCarousel.vue new file mode 100644 index 0000000..c13e1b8 --- /dev/null +++ b/modules/catalog/product/components/ProductsCarousel.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/modules/catalog/product/components/RelatedProducts.vue b/modules/catalog/product/components/RelatedProducts.vue new file mode 100644 index 0000000..4dabf68 --- /dev/null +++ b/modules/catalog/product/components/RelatedProducts.vue @@ -0,0 +1,47 @@ + + diff --git a/modules/catalog/product/components/UpsellProducts.vue b/modules/catalog/product/components/UpsellProducts.vue new file mode 100644 index 0000000..86623e0 --- /dev/null +++ b/modules/catalog/product/components/UpsellProducts.vue @@ -0,0 +1,44 @@ + + diff --git a/modules/catalog/product/components/product-types/bundle/BundleProduct.vue b/modules/catalog/product/components/product-types/bundle/BundleProduct.vue new file mode 100644 index 0000000..73d67d8 --- /dev/null +++ b/modules/catalog/product/components/product-types/bundle/BundleProduct.vue @@ -0,0 +1,248 @@ + + + diff --git a/modules/catalog/product/components/product-types/bundle/BundleProductOptionSkeleton.vue b/modules/catalog/product/components/product-types/bundle/BundleProductOptionSkeleton.vue new file mode 100644 index 0000000..ff1d749 --- /dev/null +++ b/modules/catalog/product/components/product-types/bundle/BundleProductOptionSkeleton.vue @@ -0,0 +1,35 @@ + + diff --git a/modules/catalog/product/components/product-types/bundle/BundleProductSelector.vue b/modules/catalog/product/components/product-types/bundle/BundleProductSelector.vue new file mode 100644 index 0000000..2ba2304 --- /dev/null +++ b/modules/catalog/product/components/product-types/bundle/BundleProductSelector.vue @@ -0,0 +1,253 @@ + + + diff --git a/modules/catalog/product/components/product-types/configurable/ConfigurableProduct.vue b/modules/catalog/product/components/product-types/configurable/ConfigurableProduct.vue new file mode 100644 index 0000000..789dadc --- /dev/null +++ b/modules/catalog/product/components/product-types/configurable/ConfigurableProduct.vue @@ -0,0 +1,370 @@ + + + diff --git a/modules/catalog/product/components/product-types/grouped/GroupedProduct.vue b/modules/catalog/product/components/product-types/grouped/GroupedProduct.vue new file mode 100644 index 0000000..d53da3f --- /dev/null +++ b/modules/catalog/product/components/product-types/grouped/GroupedProduct.vue @@ -0,0 +1,219 @@ + + + diff --git a/components/Products/GroupedProductSelector.vue b/modules/catalog/product/components/product-types/grouped/GroupedProductSelector.vue similarity index 50% rename from components/Products/GroupedProductSelector.vue rename to modules/catalog/product/components/product-types/grouped/GroupedProductSelector.vue index 0426c06..98676d3 100644 --- a/components/Products/GroupedProductSelector.vue +++ b/modules/catalog/product/components/product-types/grouped/GroupedProductSelector.vue @@ -1,7 +1,5 @@ - diff --git a/modules/catalog/product/components/product-types/styles.scss b/modules/catalog/product/components/product-types/styles.scss new file mode 100644 index 0000000..f98228d --- /dev/null +++ b/modules/catalog/product/components/product-types/styles.scss @@ -0,0 +1,202 @@ +.product { + @include for-desktop { + display: flex; + } + + &__info { + margin: var(--spacer-sm) auto; + @include for-desktop { + margin: 0; + max-width: 32.625rem; + padding-left: var(--spacer-lg); + width: 100%; + } + } + + &__header { + --heading-title-color: var(--c-link); + --heading-title-font-weight: var(--font-weight--bold); + --heading-padding: 0; + margin: 0 var(--spacer-sm); + display: flex; + justify-content: space-between; + @include for-desktop { + --heading-title-font-weight: var(--font-weight--semibold); + margin: 0 auto; + } + } + + &__drag-icon { + animation: moveicon 1s ease-in-out infinite; + color: var(--c-text-disabled); + } + + &__price-and-rating { + margin: 0 var(--spacer-sm) var(--spacer-base); + align-items: center; + @include for-desktop { + display: flex; + justify-content: space-between; + margin: var(--spacer-sm) 0 var(--spacer-lg) 0; + } + } + + &__rating { + display: flex; + align-items: center; + justify-content: flex-end; + margin: var(--spacer-xs) 0 var(--spacer-xs); + } + + &__count { + @include font( + --count-font, + var(--font-weight--normal), + var(--font-size--sm), + 1.4, + var(--font-family--secondary) + ); + color: var(--c-text); + text-decoration: none; + margin: 0 0 0 var(--spacer-xs); + } + + &__description { + @include font( + --product-description-font, + var(--font-weight--light), + var(--font-size--base), + 1.6, + var(--font-family--primary) + ); + } + + &__add-to-cart { + margin: var(--spacer-base) var(--spacer-sm) 0; + @include for-desktop { + margin-top: var(--spacer-2xl); + } + } + + ::v-deep &__add-to-cart-error { + margin: var(--spacer-xs) 0; + } + + &__guide, + &__compare, + &__save { + display: block; + margin: var(--spacer-xl) 0 var(--spacer-base) auto; + } + + &__compare { + margin-top: 0; + } + + &__tabs { + --tabs-title-z-index: 0; + margin: var(--spacer-lg) auto var(--spacer-2xl); + --tabs-title-font-size: var(--font-size--lg); + @include for-desktop { + margin-top: var(--spacer-2xl); + } + } + + &__property { + margin: var(--spacer-base) 0; + + &__button { + --button-font-size: var(--font-size--base); + } + } + + &__review { + padding-bottom: 24px; + border-bottom: var(--c-light) solid 1px; + margin-bottom: var(--spacer-base); + } + + &__additional-info { + color: var(--c-link); + @include font( + --additional-info-font, + var(--font-weight--light), + var(--font-size--sm), + 1.6, + var(--font-family--primary) + ); + + &__title { + font-weight: var(--font-weight--normal); + font-size: var(--font-size--base); + margin: 0 0 var(--spacer-sm); + + &:not(:first-child) { + margin-top: 3.5rem; + } + } + + &__paragraph { + margin: 0; + } + } + + &__additional-actions { + display: flex; + justify-content: flex-start; + margin: 0 var(--spacer-sm); + @include for-desktop { + margin: 0; + } + } + + &__gallery { + flex: 1; + } +} + +.sf-gallery { + ::v-deep .glide__slide { + flex: none; + } +} + +::v-deep .sf-gallery__thumbs { + .sf-image { + position: relative; + } + .sf-image-loaded { + display: block; + } +} + +@keyframes moveicon { + 0% { + transform: translate3d(0, 0, 0) rotate(90deg) scale(1, -1); + } + 50% { + transform: translate3d(10%, 0, 0) rotate(90deg) scale(1, -1); + } + 100% { + transform: translate3d(0, 0, 0) rotate(90deg) scale(1, -1); + } +} + +.loading { + &--product { + padding: var(--spacer-3xl) auto; + @include for-desktop { + padding-top: 3.75rem; + padding-bottom: 3.75rem; + } + } + + &--product-gallery { + padding: var(--spacer-3xl) auto; + height: 700px; + @include for-desktop { + padding-top: 3.75rem; + padding-bottom: 3.75rem; + } + } +} diff --git a/modules/catalog/product/components/tabs/ProductTabs.vue b/modules/catalog/product/components/tabs/ProductTabs.vue new file mode 100644 index 0000000..f85419b --- /dev/null +++ b/modules/catalog/product/components/tabs/ProductTabs.vue @@ -0,0 +1,185 @@ + + diff --git a/modules/catalog/product/composables/useProduct/commands/getProductDetailsCommand.ts b/modules/catalog/product/composables/useProduct/commands/getProductDetailsCommand.ts new file mode 100644 index 0000000..022fcc0 --- /dev/null +++ b/modules/catalog/product/composables/useProduct/commands/getProductDetailsCommand.ts @@ -0,0 +1,10 @@ +import { UseContextReturn } from '~/types/core'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; + +export const getProductDetailsCommand = { + execute: async (context: UseContextReturn, searchParams: GetProductSearchParams, customQuery = { productDetail: 'productDetail' }, customHeaders = {}) => { + const { data } = await context.app.$vsf.$magento.api.productDetail(searchParams, customQuery, customHeaders); + + return data?.products ?? null; + }, +}; diff --git a/modules/catalog/product/composables/useProduct/commands/getProductListCommand.ts b/modules/catalog/product/composables/useProduct/commands/getProductListCommand.ts new file mode 100644 index 0000000..ba2d7a8 --- /dev/null +++ b/modules/catalog/product/composables/useProduct/commands/getProductListCommand.ts @@ -0,0 +1,10 @@ +import { UseContextReturn } from '~/types/core'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; + +export const getProductListCommand = { + execute: async (context: UseContextReturn, searchParams: GetProductSearchParams, customQuery = { products: 'products' }, customHeaders = {}) => { + const { data } = await context.app.$vsf.$magento.api.products(searchParams, customQuery, customHeaders); + + return data?.products ?? null; + }, +}; diff --git a/modules/catalog/product/composables/useProduct/index.ts b/modules/catalog/product/composables/useProduct/index.ts new file mode 100644 index 0000000..561dc5b --- /dev/null +++ b/modules/catalog/product/composables/useProduct/index.ts @@ -0,0 +1,80 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import { getProductListCommand } from '~/modules/catalog/product/composables/useProduct/commands/getProductListCommand'; +import { getProductDetailsCommand } from '~/modules/catalog/product/composables/useProduct/commands/getProductDetailsCommand'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; +import type { ProductInterface } from '~/modules/GraphQL/types'; +import type { + ProductDetails, + ProductList, + UseProductErrors, + UseProductInterface, +} from './useProduct'; + +/** + * Allows loading product details or list with + * params for sorting, filtering and pagination. + * + * See the {@link UseProductInterface} for a list of methods and values available in this composable. + */ +export function useProduct(id?: string): UseProductInterface { + const loading = ref(false); + const error = ref({ + getProductList: null, + getProductDetails: null, + }); + + const context = useContext(); + + const getProductList = async (searchParams: GetProductSearchParams): Promise => { + Logger.debug(`useProduct/${id}/getProductList`, searchParams); + let products: ProductList = null; + + try { + loading.value = true; + products = await getProductListCommand.execute(context, searchParams); + error.value.getProductList = null; + } catch (err) { + error.value.getProductList = err; + Logger.error(`useProduct/${id}/search`, err); + } finally { + loading.value = false; + } + + return products; + }; + + const getProductDetails = async (searchParams: GetProductSearchParams): Promise => { + Logger.debug(`useProduct/${id}/getProductDetails`, searchParams); + let products: ProductDetails = null; + + try { + loading.value = true; + products = await getProductDetailsCommand.execute(context, searchParams); + error.value.getProductDetails = null; + } catch (err) { + error.value.getProductDetails = err; + Logger.error(`useProduct/${id}/search`, err); + } finally { + loading.value = false; + } + + return products; + }; + + const getProductPath = (product: ProductInterface) => { + if (!product) return '/'; + return `/${product?.url_rewrites?.[0]?.url ?? product.url_key}`; + }; + + return { + getProductList, + getProductDetails, + getProductPath, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './useProduct'; +export default useProduct; diff --git a/modules/catalog/product/composables/useProduct/useProduct.ts b/modules/catalog/product/composables/useProduct/useProduct.ts new file mode 100644 index 0000000..61033a4 --- /dev/null +++ b/modules/catalog/product/composables/useProduct/useProduct.ts @@ -0,0 +1,44 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { ProductsListQuery, ProductDetailsQuery } from '~/modules/GraphQL/types'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; +import { Product } from '~/modules/catalog/product/types'; + +export type ProductList = ProductsListQuery['products']; + +export type ProductDetails = ProductDetailsQuery['products']; + +/** + * The {@link useProduct} error object. The properties values' are the errors + * thrown by its methods. + */ +export interface UseProductErrors { + /** Error when fetching the product list method fails, otherwise is `null`. */ + getProductList: Error | null; + + /** Error when fetching product details method fails, otherwise is `null`. */ + getProductDetails: Error | null; +} + +/** + * Data and methods returned from the {@link useProduct} composable. + */ +export interface UseProductInterface { + /** + * Contains errors from any of the composable methods. + * + * @see {@link UseProductErrors} documentation for more details. + */ + error: DeepReadonly>; + + /** Indicates whether any of the composable methods is in progress. */ + loading: Readonly>; + + /** Fetches a list of products with sorting, filtering and pagination. */ + getProductList(searchParams: GetProductSearchParams): Promise; + + /** Fetches a product details with sorting, filtering and pagination. */ + getProductDetails(searchParams: GetProductSearchParams): Promise; + + /** Get a product path from url_rewrites or url_key */ + getProductPath(product: Product): string; +} diff --git a/modules/catalog/product/composables/useProductGallery/index.ts b/modules/catalog/product/composables/useProductGallery/index.ts new file mode 100644 index 0000000..3f8e54b --- /dev/null +++ b/modules/catalog/product/composables/useProductGallery/index.ts @@ -0,0 +1,29 @@ +import { computed, Ref } from '@nuxtjs/composition-api'; +import { getGallery as getProductGallery } from '~/modules/catalog/product/getters/productGetters'; +import { useImage } from '~/composables'; +import type { Product } from '~/modules/catalog/product/types'; +import type { UseProductGalleryInterface } from '~/modules/catalog/product/composables/useProductGallery/useProductGallery'; + +/** + * The `useProductGallery()` composable allows building product's gallery data structure. + * + * See the {@link UseProductGalleryInterface} page for more information. + */ +export function useProductGallery(product: Ref, imgPlaceholder = ''): UseProductGalleryInterface { + const { getMagentoImage, imageSizes } = useImage(); + const productGallery = computed(() => getProductGallery(product.value).map((img) => ({ + mobile: { url: getMagentoImage(img.small) }, + desktop: { url: getMagentoImage(img.normal) }, + big: { url: getMagentoImage(img.big) }, + alt: product.value.name, + placeholder: imgPlaceholder, + }))); + + return { + productGallery, + imageSizes, + }; +} + +export default useProductGallery; +export * from './useProductGallery'; diff --git a/modules/catalog/product/composables/useProductGallery/useProductGallery.ts b/modules/catalog/product/composables/useProductGallery/useProductGallery.ts new file mode 100644 index 0000000..9dceed6 --- /dev/null +++ b/modules/catalog/product/composables/useProductGallery/useProductGallery.ts @@ -0,0 +1,33 @@ +import { ComputedRef } from '@nuxtjs/composition-api'; +import { ImageSizes } from '~/composables'; + +/** + * Product gallery image data structure + */ +export interface ProductGalleryImageInterface { + url: string; +} + +/** + * Product gallery data structure + */ +export interface ProductGalleryInterface { + mobile?: ProductGalleryImageInterface; + desktop?: ProductGalleryImageInterface; + big?: ProductGalleryImageInterface; + alt?: string; +} + +/** + * Represents the data returned from and functions available in the `useProductGallery()` composable. + */ +export interface UseProductGalleryInterface { + /** + * Computed {@link ProductGalleryInterface} data array, mapped based on the product's gallery fetch + */ + productGallery: ComputedRef, + /** + * Available image sizes derived from {@link UseImageInterface} + */ + imageSizes: ImageSizes +} diff --git a/modules/catalog/product/composables/useProductTabs/index.ts b/modules/catalog/product/composables/useProductTabs/index.ts new file mode 100644 index 0000000..e2fb521 --- /dev/null +++ b/modules/catalog/product/composables/useProductTabs/index.ts @@ -0,0 +1,58 @@ +import { ref } from '@nuxtjs/composition-api'; +import type { TabsConfigInterface } from '~/modules/catalog/product/composables/useProductTabs/useProductTabs'; +import type { UseProductTabsInterface } from '~/modules/catalog/product/composables/useProductTabs'; + +export const TabsConfig: TabsConfigInterface = { + description: { + ID: 1, + title: 'Description', + }, + reviews: { + ID: 2, + title: 'Reviews', + }, + additional_info: { + ID: 3, + title: 'Additional info', + }, +}; + +/** + * The `useProductTabs()` composable allows manage product's tabs + * + * See the {@link UseProductTabsInterface} page for more information. + */ +export function useProductTabs(): UseProductTabsInterface { + const activeTab = ref(TabsConfig.description.ID); + + const setActiveTab = (tabId: number) => { + activeTab.value = tabId; + }; + + const openNewReviewTab = () => { + if (!process.client) return; + + setActiveTab(TabsConfig.reviews.ID); + const reviews = document.querySelector('#addReview'); + if (!reviews) return; + + setTimeout( + () => { + reviews.scrollIntoView({ + behavior: 'smooth', + block: 'end', + }); + }, + 500, + ); + }; + + return { + activeTab, + setActiveTab, + openNewReviewTab, + }; +} + +export default useProductTabs; +export * from './useProductTabs'; diff --git a/modules/catalog/product/composables/useProductTabs/useProductTabs.ts b/modules/catalog/product/composables/useProductTabs/useProductTabs.ts new file mode 100644 index 0000000..c986808 --- /dev/null +++ b/modules/catalog/product/composables/useProductTabs/useProductTabs.ts @@ -0,0 +1,25 @@ +import { Ref } from '@nuxtjs/composition-api'; + +/** + * Single tab data structure + */ +export interface TabInterface { + ID: number; + title: string; +} + +/** + * Tabs configuration data structure + */ +export interface TabsConfigInterface { + [code: string]: TabInterface; +} + +/** + * Represents the data returned from and functions available in the `useProductTabs()` composable. + */ +export interface UseProductTabsInterface { + activeTab: Ref; + setActiveTab(tabId: number): void; + openNewReviewTab(): void; +} diff --git a/modules/catalog/product/composables/useRelatedProducts/index.ts b/modules/catalog/product/composables/useRelatedProducts/index.ts new file mode 100644 index 0000000..f6ae090 --- /dev/null +++ b/modules/catalog/product/composables/useRelatedProducts/index.ts @@ -0,0 +1,62 @@ +import { ref, useContext, readonly } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; +import type { + RelatedProduct, + UseRelatedProductsErrors, + UseRelatedProductsInterface, + UseRelatedProductsSearchParams, +} from './useRelatedProducts'; + +/** + * Allows searching for related products + * with params for sort, filter and pagination. + * + * See the {@link UseRelatedProductsInterface} for a list of methods and values available in this composable. + */ +export function useRelatedProducts(): UseRelatedProductsInterface { + const { app } = useContext(); + const loading = ref(false); + const error = ref({ + search: null, + }); + + const search = async (params: UseRelatedProductsSearchParams): Promise => { + const { customQuery, ...searchParams } = params; + + let results = null; + + try { + loading.value = true; + + Logger.debug('[Magento] Load related products based on ', { searchParams }); + + const { data } = await app.$vsf.$magento.api.relatedProduct( + searchParams as GetProductSearchParams, + params?.customQuery ?? null, + params?.customHeaders, + ); + + Logger.debug('[Result] Related products:', { data }); + + results = data.products?.items[0]?.related_products; + error.value.search = null; + } catch (err) { + error.value.search = err; + Logger.error('useRelatedProducts/search', err); + } finally { + loading.value = false; + } + + return results; + }; + + return { + search, + error: readonly(error), + loading: readonly(loading), + }; +} + +export * from './useRelatedProducts'; +export default useRelatedProducts; diff --git a/modules/catalog/product/composables/useRelatedProducts/useRelatedProducts.ts b/modules/catalog/product/composables/useRelatedProducts/useRelatedProducts.ts new file mode 100644 index 0000000..1e8aa07 --- /dev/null +++ b/modules/catalog/product/composables/useRelatedProducts/useRelatedProducts.ts @@ -0,0 +1,39 @@ +import type { DeepReadonly, Ref } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { RelatedProductQuery } from '~/modules/GraphQL/types'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; + +export type RelatedProduct = RelatedProductQuery['products']['items'][number]['related_products']; + +/** + * The {@link useRelatedProducts} error object. The properties values' are the + * errors thrown by its methods. + */ +export interface UseRelatedProductsErrors { + /** Error when searching for related products fails, otherwise is `null`. */ + search: Error | null; +} + +/** The params received by {@link useRelatedProducts}'s `search` method. */ +export type UseRelatedProductsSearchParams = ComposableFunctionArgs; + +/** + * Data and methods returned from the {@link useRelatedProducts} composable. + */ +export interface UseRelatedProductsInterface { + /** + * Contains errors from any of the composable methods. + * + * @see {@link UseRelatedProductsErrors} documentation for more details. + */ + error: DeepReadonly>; + + /** Indicates whether any of the composable methods is in progress. */ + loading: Readonly>; + + /** + * Searches for the related products with params for sort, filter and + * pagination. + */ + search(params: UseRelatedProductsSearchParams): Promise; +} diff --git a/modules/catalog/product/composables/useUpsellProducts/index.ts b/modules/catalog/product/composables/useUpsellProducts/index.ts new file mode 100644 index 0000000..9d67751 --- /dev/null +++ b/modules/catalog/product/composables/useUpsellProducts/index.ts @@ -0,0 +1,63 @@ +import type { Ref } from '@nuxtjs/composition-api'; +import { ref, readonly, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '~/helpers/logger'; +import type { + UseUpsellProductsError, + UseUpsellProductsInterface, + UseUpsellProductsSearchParams, +} from './useUpsellProducts'; + +/** + * Allows loading upsell products. + * + * See the {@link UseUpsellProductsInterface} for a list of methods and values available in this composable. + */ +export function useUpsellProducts(): UseUpsellProductsInterface { + const { app } = useContext(); + const loading = ref(false); + const error: Ref = ref({ + search: null, + }); + + const search = async (params: UseUpsellProductsSearchParams) => { + const { + customQuery, + ...searchParams + } = params; + + let results = null; + + try { + loading.value = true; + + Logger.debug('[Magento] Load upsell products based on ', { searchParams }); + + const { data } = await app + .$vsf + .$magento + .api + .upsellProduct(searchParams, params?.customQuery ?? null, params?.customHeaders); + + Logger.debug('[Result] Upsell products:', { data }); + + results = data.products?.items[0]?.upsell_products; + error.value.search = null; + } catch (err) { + error.value.search = err; + Logger.error('useUpsellProducts/search', err); + } finally { + loading.value = false; + } + + return results; + }; + + return { + search, + loading: readonly(loading), + error: readonly(error), + }; +} + +export default useUpsellProducts; +export * from './useUpsellProducts'; diff --git a/modules/catalog/product/composables/useUpsellProducts/useUpsellProducts.ts b/modules/catalog/product/composables/useUpsellProducts/useUpsellProducts.ts new file mode 100644 index 0000000..9ee0d8d --- /dev/null +++ b/modules/catalog/product/composables/useUpsellProducts/useUpsellProducts.ts @@ -0,0 +1,38 @@ +import type { Ref, DeepReadonly } from '@nuxtjs/composition-api'; +import type { Maybe, UpsellProductsQuery } from '~/modules/GraphQL/types'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { GetProductSearchParams } from '~/modules/catalog/product/types'; + +/** + * Errors that occured in the `useUpsellProducts` composable + */ +export interface UseUpsellProductsError { + search: Error | null; +} + +export type UpsellProducts = UpsellProductsQuery['products']['items'][0]['upsell_products']; + +/** + * Parameters accepted by the `search` method in the `useUpsellProducts` composable + */ +export type UseUpsellProductsSearchParams = ComposableFunctionArgs; + +/** + * Data and methods returned from the {@link useUpsellProducts|useUpsellProducts()} composable + */ +export interface UseUpsellProductsInterface { + /** + * Fetches upsell products matching the provided parameters + */ + search(params?: UseUpsellProductsSearchParams): Promise>; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; + + /** + * Contains errors from any of the composable methods + */ + error: DeepReadonly>; +} diff --git a/modules/catalog/product/enums/ProductTypeEnum.ts b/modules/catalog/product/enums/ProductTypeEnum.ts new file mode 100644 index 0000000..d39564e --- /dev/null +++ b/modules/catalog/product/enums/ProductTypeEnum.ts @@ -0,0 +1,7 @@ +export enum ProductTypeEnum { + SIMPLE_PRODUCT = 'SimpleProduct', + CONFIGURABLE_PRODUCT = 'ConfigurableProduct', + BUNDLE_PRODUCT = 'BundleProduct', + GROUPED_PRODUCT = 'GroupedProduct', + +} diff --git a/modules/catalog/product/getters/productGetters.ts b/modules/catalog/product/getters/productGetters.ts new file mode 100644 index 0000000..40c1bd1 --- /dev/null +++ b/modules/catalog/product/getters/productGetters.ts @@ -0,0 +1,297 @@ +import type { Price, MediaGalleryItem } from '~/modules/catalog/types'; +import type { Product, ProductAttribute } from '~/modules/catalog/product/types'; +import { Breadcrumb } from '~/modules/catalog/types'; + +import type { + BundleProduct, + CategoryInterface, + GroupedProduct, + ProductInterface, + CategoryTree, +} from '~/modules/GraphQL/types'; + +import { htmlDecode } from '~/helpers/htmlDecoder'; +import { getTotalReviews, getAverageRating } from '~/modules/review/getters/reviewGetters'; + +export interface ProductGetters { + getName: (product: ProductInterface) => string; + getSlug(product: ProductInterface, category?: CategoryInterface): string; + getPrice: (product: ProductInterface) => Price; + getGallery: (product: ProductInterface, maxGallerySize: number) => MediaGalleryItem[]; + getCoverImage: (product: ProductInterface) => string; + getAttributes: (products: ProductInterface[] | ProductInterface, filters?: Array) => Record; + getDescription: (product: ProductInterface) => string; + getCategoryIds: (product: ProductInterface) => string[]; + getId: (product: ProductInterface) => string; + getTotalReviews: (product: ProductInterface) => number; + getAverageRating: (product: ProductInterface) => number; + getBreadcrumbs?: (product: ProductInterface, category?: CategoryInterface) => Breadcrumb[]; + getCategory(product: Product, currentUrlPath: string): CategoryTree | null; + getProductRelatedProduct(product: ProductInterface): Product[]; + getProductSku(product: ProductInterface): string; + getProductThumbnailImage(product: ProductInterface): string; + getProductUpsellProduct(product: ProductInterface): ProductInterface[]; + getShortDescription(product: ProductInterface): string; + getTypeId(product: ProductInterface): 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; + [getterName: string]: any; +} + +export const getName = (product: ProductInterface): string => { + if (!product) { + return ''; + } + + return htmlDecode(product.name); +}; + +export const getSlug = (product: ProductInterface, category?: CategoryTree | CategoryInterface): 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: ProductInterface): Price => { + let regular = 0; + let special = null; + let maximum = null; + let final = null; + if (product?.price_range) { + regular = product.price_range.minimum_price.regular_price.value; + final = product.price_range.minimum_price.final_price.value; + maximum = product.price_range.maximum_price.final_price.value; + + if (final < regular) { + special = final; + } + } + + return { + regular, + special, + maximum, + final, + }; +}; + +export const getGallery = (product: Product, maxGallerySize = 4): MediaGalleryItem[] => { + const images = []; + + if (!product?.media_gallery?.length && !product?.configurable_product_options_selection?.media_gallery?.length) { + return images; + } + + const selectedGallery = product.configurable_product_options_selection?.media_gallery.length + ? 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.slice(0, maxGallerySize); +}; + +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 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] = { + code: option.attribute_code, + label: option.label, + value: option.values.map((value) => { + const obj = {}; + obj[value.value_index] = value.label; + return obj; + }), + } as ProductAttribute; + } + 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): CategoryTree | 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; + +const getCategoryBreadcrumbs = (category: CategoryInterface): Breadcrumb[] => { + let breadcrumbs = []; + + if (!category) { + return []; + } + + if (Array.isArray(category?.breadcrumbs)) { + breadcrumbs = category.breadcrumbs.map((breadcrumb) => ({ + text: breadcrumb.category_name, + link: `/${breadcrumb.category_url_path}${category.url_suffix || ''}`, + } as Breadcrumb)); + } + + breadcrumbs.push({ + text: category.name, + link: `/${category.url_path}${category.url_suffix || ''}`, + } as Breadcrumb); + + return breadcrumbs; +}; + +export const getBreadcrumbs = (product: ProductInterface, category?: CategoryInterface): Breadcrumb[] => { + let breadcrumbs = []; + + if (!product) { + return breadcrumbs; + } + + if (category) { + breadcrumbs = getCategoryBreadcrumbs(category) as Breadcrumb[]; + } + + breadcrumbs.push({ + text: getName(product), + link: `/${product?.url_rewrites?.[0]?.url ?? product.url_key}`, + }); + + return breadcrumbs; +}; + +export { getTotalReviews, getAverageRating } from '~/modules/review/getters/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); + +const productGetters: ProductGetters = { + getAttributes, + getAverageRating, + getBreadcrumbs, + getCategory, + getCategoryIds, + getCoverImage, + getDescription, + getGallery, + getId, + getName, + getPrice, + getProductRelatedProduct, + getProductSku, + getProductThumbnailImage, + getProductUpsellProduct, + getShortDescription, + getSlug, + getTotalReviews, + getTypeId, + getSwatchData, + getGroupedProducts, + getBundleProducts, +}; + +export default productGetters; diff --git a/helpers/product/bundleProduct.ts b/modules/catalog/product/helpers/bundleProduct.ts similarity index 58% rename from helpers/product/bundleProduct.ts rename to modules/catalog/product/helpers/bundleProduct.ts index c5e7797..a59d3dd 100644 --- a/helpers/product/bundleProduct.ts +++ b/modules/catalog/product/helpers/bundleProduct.ts @@ -1,17 +1,15 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { BundleProduct } from '@vue-storefront/magento-api'; -import { productGetters } from '@vue-storefront/magento'; - +import productGetters from '~/modules/catalog/product/getters/productGetters'; +import type { BundleProduct } from '~/modules/GraphQL/types'; // eslint-disable-next-line unicorn/prefer-object-from-entries export const bundleProductInitialSelector = (bundles: BundleProduct['items']) => (Array.isArray(bundles) ? bundles.reduce((acc, curr) => { const defaultValue = curr.options.find((o) => o.is_default); + const price = productGetters.getPrice(defaultValue.product); if (defaultValue) { acc[curr.uid] = { uid: defaultValue.uid, quantity: defaultValue.quantity || 1, - // @ts-ignore - price: productGetters.getPrice(defaultValue.product).regular, + price: price.special < price.regular && price.special !== null ? price.special : price.regular, }; } diff --git a/modules/catalog/product/queries/getProductPriceBySku.gql.ts b/modules/catalog/product/queries/getProductPriceBySku.gql.ts new file mode 100644 index 0000000..c0c34ba --- /dev/null +++ b/modules/catalog/product/queries/getProductPriceBySku.gql.ts @@ -0,0 +1,155 @@ +const fragmentPriceRangeFields = ` + fragment PriceRangeFields on PriceRange { + maximum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + minimum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + } +`; + +export default ` + query getProductPriceBySku( + $filter: ProductAttributeFilterInput, + $configurations: [ID!] + ) { + products(filter: $filter) { + items { + price_range { + ...PriceRangeFields + } + + ... on ConfigurableProduct { + price_range { + maximum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + minimum_price { + final_price { + currency + value + } + regular_price { + currency + value + } + } + } + + configurable_product_options_selection(configurableOptionValueUids: $configurations) { + options_available_for_selection { + attribute_code + option_value_uids + } + media_gallery { + disabled + label + position + url + } + variant { + uid + sku + name + price_range { + ...PriceRangeFields + } + } + } + } + + ... on BundleProduct { + items { + position + required + sku + title + type + uid + options { + can_change_quantity + is_default + position + uid + quantity + product { + uid + sku + name + price_range { + ...PriceRangeFields + } + } + } + } + } + + ... 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 + } + } + } + } + + } + } + } + ${fragmentPriceRangeFields} +`; diff --git a/modules/catalog/product/types.ts b/modules/catalog/product/types.ts new file mode 100644 index 0000000..1765d5e --- /dev/null +++ b/modules/catalog/product/types.ts @@ -0,0 +1,33 @@ +import { + BundleProduct, + ConfigurableProduct, + DownloadableProduct, + GroupedProduct, ProductAttributeFilterInput, ProductAttributeSortInput, + ProductInterface, + VirtualProduct, +} from '~/modules/GraphQL/types'; + +export interface ProductAttribute { + name?: string; + value: string | Record; + label: string; +} + +/** + * There is no __typename in GraphQL definitions but type_id is marked as a deprecated + */ +export interface Product extends ProductInterface, ConfigurableProduct, Omit, Omit, Omit, Omit { __typename: string } + +/** + * GraphQL's definitions lacks __typename field so we introduce WithTypename to extend any product type if required + */ +export type WithTypename = TProduct & { __typename: string }; + +export declare type GetProductSearchParams = { + search?: string; + filter?: ProductAttributeFilterInput; + pageSize?: number; + currentPage?: number; + sort?: ProductAttributeSortInput; + configurations?: string[]; +}; diff --git a/modules/catalog/types.d.ts b/modules/catalog/types.d.ts new file mode 100644 index 0000000..0182206 --- /dev/null +++ b/modules/catalog/types.d.ts @@ -0,0 +1,17 @@ +export interface Breadcrumb { + text: string; + link: string; +} + +export interface Price { + regular: number | null; + special?: number | null; + maximum?: number | null; + final?: number | null; +} + +export interface MediaGalleryItem { + small: string; + normal: string; + big: string; +} diff --git a/components/Checkout/CartPreview.vue b/modules/checkout/components/CartPreview.vue similarity index 83% rename from components/Checkout/CartPreview.vue rename to modules/checkout/components/CartPreview.vue index a2f9075..4af40f9 100644 --- a/components/Checkout/CartPreview.vue +++ b/modules/checkout/components/CartPreview.vue @@ -15,24 +15,25 @@ /> + @@ -49,12 +50,13 @@ - + + diff --git a/modules/checkout/components/UserBillingAddresses.vue b/modules/checkout/components/UserBillingAddresses.vue new file mode 100644 index 0000000..61abe76 --- /dev/null +++ b/modules/checkout/components/UserBillingAddresses.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/modules/checkout/components/UserShippingAddresses.vue b/modules/checkout/components/UserShippingAddresses.vue new file mode 100644 index 0000000..d8fb133 --- /dev/null +++ b/modules/checkout/components/UserShippingAddresses.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/modules/checkout/components/VsfPaymentProvider.vue b/modules/checkout/components/VsfPaymentProvider.vue new file mode 100644 index 0000000..618c739 --- /dev/null +++ b/modules/checkout/components/VsfPaymentProvider.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/components/Checkout/VsfShippingProvider.vue b/modules/checkout/components/VsfShippingProvider.vue similarity index 66% rename from components/Checkout/VsfShippingProvider.vue rename to modules/checkout/components/VsfShippingProvider.vue index feffbcd..ac65990 100644 --- a/components/Checkout/VsfShippingProvider.vue +++ b/modules/checkout/components/VsfShippingProvider.vue @@ -3,28 +3,21 @@
-
+
{{ $t( - 'There was some error while trying to fetch shipping methods. We are sorry, please try with different shipping details or later.' - ) - }} -
-
- {{ - $t( - 'There was some error while trying to select this shipping method. We are sorry, please try with different shipping method or later.' + 'There was some error while trying to select this shipping method. We are sorry, please try with a different shipping method.' ) }}
{{ $t( - 'There are no shipping methods available for this country. We are sorry, please try with different country or later.' + 'There are no shipping methods available for this country. We are sorry, please try with a different country.' ) }}
@@ -37,8 +30,7 @@ :label="method.method_title" :value="method.method_code" :selected=" - selectedShippingMethod && - selectedShippingMethod.method_code + selectedShippingMethod && selectedShippingMethod.method_code " name="shippingMethod" :description="method.carrier_title" @@ -49,7 +41,7 @@
{{ method.carrier_title }}
- {{ $n(getShippingMethodPrice(method), 'currency') }} + {{ $fc(getShippingMethodPrice(method)) }}
@@ -68,9 +60,7 @@ class="form__action-button" type="button" :disabled=" - !isShippingMethodStepCompleted || - isLoading || - loadingShippingProvider.save + !isShippingMethodStepCompleted || isLoading " @click="$emit('submit')" > @@ -81,18 +71,20 @@
- + + diff --git a/pages/Checkout.vue b/modules/checkout/pages/Checkout.vue similarity index 50% rename from pages/Checkout.vue rename to modules/checkout/pages/Checkout.vue index 1e91127..4c2000d 100644 --- a/pages/Checkout.vue +++ b/modules/checkout/pages/Checkout.vue @@ -5,13 +5,15 @@ @@ -29,36 +31,72 @@
- diff --git a/pages/Checkout/Payment.vue b/modules/checkout/pages/Checkout/Payment.vue similarity index 69% rename from pages/Checkout/Payment.vue rename to modules/checkout/pages/Checkout/Payment.vue index 7ec24ca..e38f348 100644 --- a/pages/Checkout/Payment.vue +++ b/modules/checkout/pages/Checkout/Payment.vue @@ -2,7 +2,7 @@
@@ -16,7 +16,7 @@ class="table__header" :class="{ table__description: tableHeader === 'Description' }" > - {{ tableHeader }} + {{ $t(tableHeader) }} @@ -37,9 +43,7 @@
{{ cartGetters.getItemSku(product) }}
- - - diff --git a/modules/customer/pages/MyAccount/MyWishlist.vue b/modules/customer/pages/MyAccount/MyWishlist.vue new file mode 100644 index 0000000..e365853 --- /dev/null +++ b/modules/customer/pages/MyAccount/MyWishlist.vue @@ -0,0 +1,508 @@ + + + + + diff --git a/modules/customer/pages/MyAccount/OrderHistory/OrderHistory.vue b/modules/customer/pages/MyAccount/OrderHistory/OrderHistory.vue new file mode 100644 index 0000000..42cb82a --- /dev/null +++ b/modules/customer/pages/MyAccount/OrderHistory/OrderHistory.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderInformationAddressColumn.vue b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderInformationAddressColumn.vue new file mode 100644 index 0000000..e4a0ecc --- /dev/null +++ b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderInformationAddressColumn.vue @@ -0,0 +1,48 @@ + + + diff --git a/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderSummaryRow.vue b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderSummaryRow.vue new file mode 100644 index 0000000..cd4f306 --- /dev/null +++ b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/OrderSummaryRow.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/SingleOrder.vue b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/SingleOrder.vue new file mode 100644 index 0000000..960f340 --- /dev/null +++ b/modules/customer/pages/MyAccount/OrderHistory/SingleOrder/SingleOrder.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/pages/ResetPassword.vue b/modules/customer/pages/MyAccount/ResetPassword.vue similarity index 72% rename from pages/ResetPassword.vue rename to modules/customer/pages/MyAccount/ResetPassword.vue index d69eaed..415f8f9 100644 --- a/pages/ResetPassword.vue +++ b/modules/customer/pages/MyAccount/ResetPassword.vue @@ -22,7 +22,7 @@ v-model="form.email" v-e2e="'login-modal-email'" :valid="!errors[0]" - :error-message="errors[0]" + :error-message="$t(errors[0])" name="email" label="Your email" class="form__element" @@ -36,7 +36,7 @@ v-model="form.password" v-e2e="'reset-password-modal-password'" :valid="!errors[0]" - :error-message="errors[0]" + :error-message="$t(errors[0])" :label="$t('Password')" name="password" type="password" @@ -51,7 +51,7 @@ v-model="form.repeatPassword" v-e2e="'reset-password-modal-password-repeat'" :valid="!errors[0]" - :error-message="errors[0]" + :error-message="$t(errors[0])" :label="$t('Repeat Password')" name="repeat-password" type="password" @@ -61,6 +61,7 @@
{{ passwordMatchError || forgotPasswordError.setNew.message }}
+
- diff --git a/modules/wishlist/components/WishlistSidebar.vue b/modules/wishlist/components/WishlistSidebar.vue new file mode 100644 index 0000000..b041c90 --- /dev/null +++ b/modules/wishlist/components/WishlistSidebar.vue @@ -0,0 +1,305 @@ + + + + diff --git a/modules/wishlist/components/__tests__/EmptyWishlist.spec.ts b/modules/wishlist/components/__tests__/EmptyWishlist.spec.ts new file mode 100644 index 0000000..072eb59 --- /dev/null +++ b/modules/wishlist/components/__tests__/EmptyWishlist.spec.ts @@ -0,0 +1,23 @@ +import { render } from '~/tests/unit/test-utils'; +import EmptyWishlist from '~/modules/wishlist/components/EmptyWishlist.vue'; + +describe('EmptyWishlist.vue', () => { + it('Renders with a default value', () => { + const { getByTestId } = render(EmptyWishlist); + + const icon = getByTestId('icon'); + const label = getByTestId('label'); + + expect(icon).toBeDefined(); + expect(label).toBeDefined(); + }); + + it('Renders content from the "default" slot', () => { + const wrapper = render(EmptyWishlist, { + slots: { + default: '
', + }, + }); + expect(wrapper.html()).toContain('
'); + }); +}); diff --git a/modules/wishlist/composables/useWishlist/index.ts b/modules/wishlist/composables/useWishlist/index.ts new file mode 100644 index 0000000..76498ac --- /dev/null +++ b/modules/wishlist/composables/useWishlist/index.ts @@ -0,0 +1,318 @@ +import { readonly, ref, useContext } from '@nuxtjs/composition-api'; +import { findItemOnWishlist } from '~/modules/wishlist/helpers/findItemOnWishlist'; +import { Logger } from '~/helpers/logger'; +import { useWishlistStore } from '~/modules/wishlist/store/wishlistStore'; +import type { Wishlist } from '~/modules/GraphQL/types'; +import type { + UseWishlistAddItemParams, + UseWishlistErrors, + UseWishlistInterface, + UseWishlistIsInWishlistParams, + UseWishlistLoadParams, + UseWishlistRemoveItemParams, + UseWishlistAfterAddingWishlistItemToCartParams, +} from '~/modules/wishlist/composables/useWishlist/useWishlist'; +import { useUiNotification } from '~/composables'; + +/** + * Allows loading and manipulating wishlist of the current user. + * + * See the {@link UseWishlistInterface} for a list of methods and values available in this composable. + */ +export function useWishlist(): UseWishlistInterface { + const wishlistStore = useWishlistStore(); + const { app } = useContext(); + const { send: sendNotification } = useUiNotification(); + const loading = ref(false); + const calculateWishlistTotal = (wishlists: Wishlist[]) => wishlists.reduce((acc, current) => acc + (current?.items_count ?? 0), 0); + const error = ref({ + addItem: null, + removeItem: null, + load: null, + clear: null, + loadItemsCount: null, + afterAddingWishlistItemToCart: null, + }); + + const load = async (params?: UseWishlistLoadParams) => { + Logger.debug('useWishlist/load'); + + try { + loading.value = true; + Logger.debug('[Magento Storefront]: useWishlist.load params->', params); + const apiState = app.$vsf.$magento.config.state; + + if (apiState.getCustomerToken()) { + const { data } = await app.$vsf.$magento.api.wishlist(params?.searchParams, params?.customQuery ?? null, params?.customHeaders); + + Logger.debug('[Result]:', { data }); + const loadedWishlist = data?.customer?.wishlists ?? []; + if (loadedWishlist[0]) { + // @ts-expect-error M2-579 + [wishlistStore.wishlist] = loadedWishlist; + } + } + + error.value.load = null; + } catch (err) { + error.value.load = err; + Logger.error('useWishlist/load', err); + } finally { + loading.value = false; + } + + return wishlistStore.wishlist; + }; + + const isInWishlist = ({ product }: UseWishlistIsInWishlistParams) => { + Logger.debug('useWishlist/isInWishlist', product); + + const wishlistProduct = findItemOnWishlist(wishlistStore.wishlist, product); + + return !!(wishlistProduct?.id && wishlistProduct?.quantity); + }; + + const setWishlist = (newWishlist: Wishlist) => { + wishlistStore.wishlist = newWishlist; + Logger.debug('useWishlist/setWishlist', newWishlist); + }; + + const removeItem = async ({ product, customQuery, customHeaders }: UseWishlistRemoveItemParams) => { + Logger.debug('useWishlist/removeItem', product); + + try { + loading.value = true; + Logger.debug('[Magento Storefront]: useWishlist.removeItem params->', { + currentWishlist: wishlistStore.wishlist, + product, + customQuery, + customHeaders, + }); + + const itemOnWishlist = findItemOnWishlist(wishlistStore.wishlist, product); + const { data } = await app.context.$vsf.$magento.api.removeProductsFromWishlist({ + id: '0', + items: [itemOnWishlist.id], + }, customQuery, customHeaders); + + Logger.debug('[Result]:', { data }); + error.value.removeItem = null; + wishlistStore.$patch((state) => { + state.wishlist = data?.removeProductsFromWishlist?.wishlist ?? {}; + }); + } catch (err) { + error.value.removeItem = err; + Logger.error('useWishlist/removeItem', err); + } finally { + loading.value = false; + } + }; + + const loadItemsCount = async (): Promise => { + Logger.debug('useWishlist/wishlistItemsCount'); + const apiState = app.context.$vsf.$magento.config.state; + let itemsCount : number | null = null; + + try { + loading.value = true; + error.value.loadItemsCount = null; + if (apiState.getCustomerToken()) { + const { data } = await app.context.$vsf.$magento.api.wishlistItemsCount(); + + Logger.debug('[Result]:', { data }); + const loadedWishlist : Wishlist[] = data?.customer?.wishlists ?? []; + itemsCount = calculateWishlistTotal(loadedWishlist); + wishlistStore.$patch((state) => { + state.wishlist.items_count = itemsCount; + }); + } + } catch (err) { + error.value.loadItemsCount = err; + Logger.error('useWishlist/wishlistItemsCount', err); + } finally { + loading.value = false; + } + + return itemsCount; + }; + + // eslint-disable-next-line consistent-return + const addItem = async ({ product, customQuery, customHeaders }: UseWishlistAddItemParams) => { + Logger.debug('useWishlist/addItem', product); + + try { + loading.value = true; + Logger.debug('[Magento Storefront]: useWishlist.addItem params->', { + currentWishlist: wishlistStore.wishlist, + product, + customQuery, + customHeaders, + }); + + if (!wishlistStore.wishlist) { + await load({}); + } + + const itemOnWishlist = findItemOnWishlist(wishlistStore.wishlist, product); + + if (itemOnWishlist) { + return; + } + + if (!app.$vsf.$magento.config.state.getCustomerToken()) { + Logger.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 app.context.$vsf.$magento.api.addProductToWishList({ + id: '0', + items: [{ + sku: product.sku, + quantity: 1, + }], + }, customQuery, customHeaders); + + Logger.debug('[Result]:', { data }); + + wishlistStore.$patch((state) => { + state.wishlist = data?.addProductsToWishlist?.wishlist ?? {}; + }); + + break; + } + case 'ConfigurableProduct': { + const { data: configurableProductData } = await app.context.$vsf.$magento.api.addProductToWishList({ + id: '0', + items: [{ + sku: product.configurable_product_options_selection?.variant?.sku || product.sku, + quantity: 1, + parent_sku: product.sku, + }], + }, customQuery, customHeaders); + + Logger.debug('[Result]:', { data: configurableProductData }); + + wishlistStore.$patch((state) => { + state.wishlist = configurableProductData?.addProductsToWishlist?.wishlist ?? {}; + }); + + break; + } + case 'BundleProduct': { + const { data: bundleProductData } = await app.context.$vsf.$magento.api.addProductToWishList({ + id: '0', + items: [{ + sku: product.sku, + quantity: 1, + entered_options: [], + }], + }, customQuery, customHeaders); + + Logger.debug('[Result]:', { data: bundleProductData }); + + wishlistStore.$patch((state) => { + state.wishlist = bundleProductData?.addProductsToWishlist?.wishlist ?? {}; + }); + + break; + } + default: + // @ts-ignore + // eslint-disable-next-line no-underscore-dangle + Logger.error(`Product Type ${product.__typename} not supported in add to wishlist yet`); + } + } catch (err) { + error.value.addItem = err; + Logger.error('useWishlist/addItem', err); + } finally { + loading.value = false; + } + }; + + // eslint-disable-next-line @typescript-eslint/require-await + const clear = async () => { + Logger.debug('useWishlist/clear'); + + try { + loading.value = true; + error.value.clear = null; + wishlistStore.$patch((state) => { + state.wishlist = {}; + }); + } catch (err) { + error.value.clear = err; + Logger.error('useWishlist/clear', err); + } finally { + loading.value = false; + } + }; + + const afterAddingWishlistItemToCart = ( + { product, cartError }: UseWishlistAfterAddingWishlistItemToCartParams, + ) => { + Logger.debug('useWishlist/afterAddingItemToCart', product); + + if (!isInWishlist({ product })) return; + + try { + if (cartError?.message) { + sendNotification({ + id: Symbol('product_added_to_cart_from_wishlist_error'), + message: cartError.message, + type: 'danger', + icon: 'cross', + persist: false, + title: 'Wishlist error', + }); + } else { + // eslint-disable-next-line promise/catch-or-return + removeItem({ product }) + // eslint-disable-next-line promise/always-return + .then(() => { + sendNotification({ + id: Symbol('product_added_to_cart_from_wishlist'), + message: app.i18n.t( + 'You added {product} to your shopping cart.', + { product: product.name }, + ) as string, + type: 'success', + icon: 'check', + persist: false, + title: 'Wishlist', + }); + }); + } + } catch (err) { + error.value.afterAddingWishlistItemToCart = err; + Logger.error('useWishlist/afterAddingWishlistItemToCart', err); + } + }; + + const addOrRemoveItem = async ({ product, customQuery, customHeaders }: UseWishlistAddItemParams) => { + await (isInWishlist({ product }) ? removeItem({ product, customQuery, customHeaders }) : addItem({ product, customQuery, customHeaders })); + }; + + return { + loadItemsCount, + isInWishlist, + addItem, + load, + removeItem, + clear, + setWishlist, + afterAddingWishlistItemToCart, + addOrRemoveItem, + loading: readonly(loading), + error: readonly(error), + }; +} + +export default useWishlist; +export * from './useWishlist'; diff --git a/modules/wishlist/composables/useWishlist/useWishlist.ts b/modules/wishlist/composables/useWishlist/useWishlist.ts new file mode 100644 index 0000000..c4529f4 --- /dev/null +++ b/modules/wishlist/composables/useWishlist/useWishlist.ts @@ -0,0 +1,129 @@ +import type { Ref, DeepReadonly } from '@nuxtjs/composition-api'; +import type { ComposableFunctionArgs } from '~/composables/types'; +import type { Wishlist, ProductInterface } from '~/modules/GraphQL/types'; +import { + BundleProduct, ConfigurableProduct, DownloadableProduct, GroupedProduct, VirtualProduct, +} from '~/modules/GraphQL/types'; + +export interface Product extends ProductInterface, ConfigurableProduct, Omit, Omit, Omit, Omit { __typename: string } + +/** + * Errors that occurred in the `useWishlist` composable + */ +export interface UseWishlistErrors { + addItem: Error | null; + removeItem: Error | null; + load: Error | null; + clear: Error | null; + loadItemsCount: Error | null; + afterAddingWishlistItemToCart: Error | null, +} + +/** + * Parameters accepted by the `loadItemsCount` method in the `useWishlist` composable + */ +export type UseWishlistLoadItemsCountParams = ComposableFunctionArgs<{}>; + +/** + * Parameters accepted by the `isInWishlist` method in the `useWishlist` composable + */ +export type UseWishlistIsInWishlistParams = { product: Product }; + +/** + * Parameters accepted by the `addItem` method in the `useWishlist` composable + */ +export type UseWishlistAddItemParams = ComposableFunctionArgs<{ + product: Product; +}>; + +/** + * Parameters accepted by the `load` method in the `useWishlist` composable + */ +export type UseWishlistLoadParams = ComposableFunctionArgs<{ + searchParams?: Partial<{ + currentPage: number; + pageSize: number; + }> +}>; + +/** + * Parameters accepted by the `removeItem` method in the `useWishlist` composable + */ +export type UseWishlistRemoveItemParams = ComposableFunctionArgs<{ + product: Product; +}>; + +/** + * Parameters accepted by the `clear` method in the `useWishlist` composable + */ +export type UseWishlistClearParams = { + currentWishlist: Wishlist; +}; + +/** + * Parameters accepted by the `afterAddingWishlistItemToCart` method in the `useWishlist` composable + */ +export type UseWishlistAfterAddingWishlistItemToCartParams = ComposableFunctionArgs<{ + product: Product; + cartError: Error; +}>; + +/** + * Data and methods returned from the {@link useWishlist|useWishlist()} composable + */ +export interface UseWishlistInterface { + /** + * Returns a total number of items added to the wishlist of the current user + */ + loadItemsCount(): Promise; + + /** + * Checks if given product is in the wishlist of the current user + */ + isInWishlist(params: UseWishlistIsInWishlistParams): boolean; + + /** + * Adds product to the wishlist of the current user + */ + addItem(params: UseWishlistAddItemParams): Promise; + + /** + * Fetches wishlist of the current customer + */ + load(params?: UseWishlistLoadParams): Promise; + + /** + * Removes product from the wishlist of the current user + */ + removeItem(params: UseWishlistRemoveItemParams): Promise; + + /** + * Removes all products from the wishlist of the current user + */ + clear(params: UseWishlistClearParams): Promise; + + /** + * Overrides the wishlist of the current user + */ + setWishlist(newWishlist: Wishlist): void; + + /** + * After adding a product from the wishlist to the cart + */ + afterAddingWishlistItemToCart(params: UseWishlistAfterAddingWishlistItemToCartParams): void; + + /** + * Adds item to the wishlist if is not already added, otherwise remove it from the wishlist + */ + addOrRemoveItem(params: UseWishlistAddItemParams): Promise; + + /** + * Indicates whether any of the methods is in progress + */ + loading: Readonly>; + + /** + * Contains errors from any of the composable methods + */ + error: DeepReadonly>; +} diff --git a/modules/wishlist/getters/types.d.ts b/modules/wishlist/getters/types.d.ts new file mode 100644 index 0000000..8f0c3e1 --- /dev/null +++ b/modules/wishlist/getters/types.d.ts @@ -0,0 +1,15 @@ +import { Price } from '~/modules/catalog/types'; +import { ProductAttribute } from '~/modules/catalog/product/types'; +import { Totals } from '~/composables'; + +export interface WishlistGetters { + getItems: (wishlist: WISHLIST) => WISHLIST_ITEM[]; + getItemName: (wishlistItem: WISHLIST_ITEM) => string; + getItemImage: (wishlistItem: WISHLIST_ITEM) => string; + getItemPrice: (wishlistItem: WISHLIST_ITEM) => Price; + getItemAttributes: (wishlistItem: WISHLIST_ITEM, filters?: Array) => Record; + getItemSku: (wishlistItem: WISHLIST_ITEM) => string; + getTotals: (wishlist: WISHLIST) => Totals; + getTotalItems: (wishlist: WISHLIST) => number; + [getterName: string]: (element: any, options?: any) => unknown; +} diff --git a/modules/wishlist/getters/wishlistGetters.ts b/modules/wishlist/getters/wishlistGetters.ts new file mode 100644 index 0000000..5820c98 --- /dev/null +++ b/modules/wishlist/getters/wishlistGetters.ts @@ -0,0 +1,127 @@ +import type { Totals, Pagination } from '~/composables/types'; +import type { Price } from '~/modules/catalog/types'; +import type { WishlistGetters as BaseWishlistGetters } from './types'; +import type { + Wishlist, ProductInterface, WishlistItemInterface, +} from '~/modules/GraphQL/types'; + +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): Price => { + 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): Totals => { + 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 | Wishlist[]): number => (Array.isArray(wishlist) + ? wishlist[0]?.items_count + : (wishlist?.items_count || 0)); + +const getPagination = (wishlistData: Wishlist): Pagination => ({ + 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], +}); + +type MappedProduct = { + product: ProductInterface, + quantity: number, + added_at: string, + id: string, +}; + +const getProducts = (wishlistData: Wishlist[] | Wishlist): MappedProduct[] => { + if (!wishlistData || (Array.isArray(wishlistData) && wishlistData.length === 0)) { + return []; + } + + const reducer = (acc: MappedProduct[], curr: Wishlist) : MappedProduct[] => [...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): MappedProduct => ({ + product: item.product, + quantity: item.quantity, + added_at: item.added_at, + id: item.id, + }); + + return Array.isArray(wishlistData) + ? wishlistData.reduce((acc, curr) => reducer(acc, curr), [] as MappedProduct[]) + : wishlistData?.items_v2?.items.map((e) => mapper(e)); +}; + +export interface WishlistGetters extends BaseWishlistGetters { + getShippingPrice(wishlist: Wishlist): number; + + getItemQty(product: WishlistItemInterface): number; + + getPagination(wishlistData: Wishlist | Wishlist[]): Pagination; + + getProducts(wishlistData: Wishlist | Wishlist[]): { + product: ProductInterface; + quantity: number; + added_at: string; + id: string; + }[]; +} + +const wishlistGetters: WishlistGetters = { + getTotals, + getShippingPrice, + getItems, + getItemName, + getItemImage, + getItemPrice, + getItemQty, + getItemAttributes, + getItemSku, + getTotalItems, + getPagination, + getProducts, +}; + +export default wishlistGetters; diff --git a/modules/wishlist/helpers/findItemOnWishlist.ts b/modules/wishlist/helpers/findItemOnWishlist.ts new file mode 100644 index 0000000..5458dc5 --- /dev/null +++ b/modules/wishlist/helpers/findItemOnWishlist.ts @@ -0,0 +1,10 @@ +import { ProductInterface, Wishlist } from '~/modules/GraphQL/types'; +import { productMatch } from '~/modules/wishlist/helpers/productMatch'; + +export const findItemOnWishlist = (currentWishlist: Wishlist, product: ProductInterface) => { + const wishlist: Wishlist = Array.isArray(currentWishlist) ? currentWishlist[0] : currentWishlist; + + return wishlist + ?.items_v2 + ?.items?.find((item) => productMatch(item.product, product)); +}; diff --git a/modules/wishlist/helpers/productMatch.ts b/modules/wishlist/helpers/productMatch.ts new file mode 100644 index 0000000..2b48817 --- /dev/null +++ b/modules/wishlist/helpers/productMatch.ts @@ -0,0 +1,11 @@ +import { ProductInterface } from '~/modules/GraphQL/types'; + +export const productMatch = ( + productA: ProductInterface, + productB: ProductInterface, +): boolean => { + const equalSku = productA?.sku === productB?.sku; + const equalUid = productA?.uid === productB?.uid; + + return equalSku && equalUid; +}; diff --git a/modules/wishlist/index.ts b/modules/wishlist/index.ts new file mode 100644 index 0000000..a66382d --- /dev/null +++ b/modules/wishlist/index.ts @@ -0,0 +1,5 @@ +import { Module } from '@nuxt/types'; + +const nuxtModule : Module = function wishlistModule() {}; + +export default nuxtModule; diff --git a/modules/wishlist/store/wishlistStore.ts b/modules/wishlist/store/wishlistStore.ts new file mode 100644 index 0000000..3f4c2e2 --- /dev/null +++ b/modules/wishlist/store/wishlistStore.ts @@ -0,0 +1,12 @@ +import { defineStore } from 'pinia'; +import type { Wishlist } from '~/modules/GraphQL/types'; + +interface WishlistState { + wishlist: Wishlist, +} + +export const useWishlistStore = defineStore('wishlist', { + state: (): WishlistState => ({ + wishlist: { items_count: 0 }, + }), +}); diff --git a/nuxt.config.js b/nuxt.config.js index df8fcf4..78e12d7 100755 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -1,213 +1,302 @@ +// @core-development-only-start +/* eslint-disable unicorn/prefer-module */ +// @core-development-only-end import webpack from 'webpack'; -import config from './config.js'; import middleware from './middleware.config'; import { getRoutes } from './routes'; +import { probeGoogleFontsApi, GOOGLE_FONT_API_URL } from './modules/core/GoogleFontsAPI/probeGoogleFontsApi.ts'; + +const GoogleFontsPlugin = require('@beyonk/google-fonts-webpack-plugin'); const { integrations: { magento: { configuration: { cookies, + cookiesDefaultOpts, externalCheckout, - tax, defaultStore, - websites, - facets, + magentoBaseUrl, + imageProvider, + magentoApiEndpoint, + customApolloHttpLinkOptions, + customer, }, }, }, } = middleware; -export default { - ssr: true, - dev: config.get('nuxtAppEnvironment') !== 'production', - server: { - port: config.get('nuxtAppPort'), - host: '0.0.0.0', - }, - head: { - title: process.env.npm_package_name || '', - meta: [ - { charset: 'utf-8' }, - { - name: 'viewport', - content: 'width=device-width, initial-scale=1', - }, - { - hid: 'description', - name: 'description', - content: process.env.npm_package_description || '', - }, - ], - link: [ - { - rel: 'icon', - type: 'image/x-icon', - href: '/favicon.ico', - }, - ], - }, - loading: { color: '#fff' }, - plugins: [ - { - src: '~/plugins/domPurify.js', - ssr: false, +export default async () => { + const baseConfig = { + ssr: true, + dev: process.env.VSF_NUXT_APP_ENV !== 'production', + server: { + port: process.env.VSF_NUXT_APP_PORT, + host: process.env.VSF_NUXT_APP_HOST || '0.0.0.0', }, - ], - buildModules: [ - // to core - '@nuxt/typescript-build', - '@nuxtjs/google-fonts', - '@nuxtjs/pwa', - '@nuxtjs/style-resources', - ['@vue-storefront/nuxt', { - useRawSource: { - dev: ['@vue-storefront/magento', '@vue-storefront/core'], - prod: ['@vue-storefront/magento', '@vue-storefront/core'] - } - } - ], - ['@vue-storefront/nuxt-theme', { - routes: false, - }], - ['@vue-storefront/magento/nuxt', { - i18n: { - useNuxtI18nConfig: true, - }, - cookies, - externalCheckout, - tax, - defaultStore, - websites, - facets, - }], - ], - modules: [ - ['nuxt-i18n', { - baseUrl: process.env.BASE_URL || 'http://localhost:3000', - }], - 'cookie-universal-nuxt', - 'vue-scrollto/nuxt', - '@vue-storefront/middleware/nuxt', - ], - i18n: { - currency: 'USD', - country: 'US', - currencies: [ - { - name: 'EUR', - label: 'Euro', - }, - { - name: 'USD', - label: 'Dollar', - }, + head: { + title: process.env.npm_package_name || '', + meta: [ + { charset: 'utf8' }, + { + name: 'viewport', + content: 'width=device-width, initial-scale=1', + }, + { + hid: 'description', + name: 'description', + content: process.env.npm_package_description || '', + }, + ], + link: [ + { + rel: 'icon', + type: 'image/x-icon', + href: '/favicon.ico', + }, + ], + }, + loading: { color: '#fff' }, + device: { + refreshOnResize: true, + }, + buildModules: [ + // to core + '@nuxtjs/composition-api/module', + '@nuxt/typescript-build', + '@nuxtjs/pwa', + '@nuxtjs/style-resources', + '@nuxtjs/device', + ['@vue-storefront/nuxt', { + // selectively disabling certain @vue-storefront/core plugins for migration + context: false, + logger: false, + ssr: false, + sfui: false, + i18nExtension: false, + e2e: true, + performance: { + httpPush: false, + purgeCSS: { + enabled: false, + }, + }, + }], + ['~/modules/core', { + cookies, + cookiesDefaultOpts, + externalCheckout, + defaultStore, + magentoBaseUrl, + imageProvider, + magentoApiEndpoint, + customApolloHttpLinkOptions, + customer, + }], + '@nuxt/image', + '@pinia/nuxt', ], - locales: [ - { - code: 'en', - label: 'English', - file: 'en.js', - iso: 'en', - }, + modules: [ + '~/modules/catalog', + '~/modules/customer', + '~/modules/wishlist', + '~/modules/checkout', + '~/modules/review', + ['nuxt-i18n', { + baseUrl: process.env.VSF_STORE_URL || 'http://localhost:3000', + }], + 'cookie-universal-nuxt', + 'vue-scrollto/nuxt', + '@vue-storefront/middleware/nuxt', + '@nuxt/image', + ['@vue-storefront/cache/nuxt', { + enabled: process.env.VSF_REDIS_ENABLED === 'true', + invalidation: { + endpoint: process.env.VSF_REDIS_CACHE_INVALIDATE_URL, + key: process.env.VSF_REDIS_CACHE_INVALIDATE_KEY, + handlers: [ + '@vue-storefront/cache/defaultHandler', + ], + }, + driver: [ + '@vue-storefront/redis-cache', + { + defaultTimeout: 86_400, + // docs: https://github.com/luin/ioredis/blob/master/API.md#new-redisport-host-options + redis: { + keyPrefix: process.env.VSF_REDIS_KEY_PREFIX, + host: process.env.VSF_REDIS_HOST, + port: process.env.VSF_REDIS_PORT, + }, + }, + ], + }], + ['@vue-storefront/http-cache/nuxt', { + default: 'max-age=300, s-maxage=3600, stale-while-revalidate=86400', + matchRoute: { + '/': 'max-age=1800, s-maxage=86400, stale-while-revalidate=86400', + '*/customer*': 'none', + '*/checkout*': 'none', + }, + }], ], - defaultLocale: 'en', - lazy: true, - seo: true, - langDir: 'lang/', - vueI18n: { - fallbackLocale: 'en', - numberFormats: { - en: { - currency: { - style: 'currency', - currency: 'USD', - currencyDisplay: 'symbol', + i18n: { + country: 'US', + baseUrl: process.env.VSF_STORE_URL, + strategy: 'prefix', + locales: [ + { + code: 'default', + file: 'en.js', + iso: 'en_US', + defaultCurrency: 'USD', + }, + { + code: 'german', + file: 'de.js', + iso: 'de_DE', + defaultCurrency: 'EUR', + }, + ], + defaultLocale: 'default', + lazy: true, + seo: true, + langDir: 'lang/', + vueI18n: { + fallbackLocale: 'default', + numberFormats: { + default: { + currency: { + style: 'currency', + currency: 'USD', + currencyDisplay: 'symbol', + }, + }, + german: { + currency: { + style: 'currency', + currency: 'EUR', + currencyDisplay: 'symbol', + }, }, }, }, + detectBrowserLanguage: false, }, - detectBrowserLanguage: { - cookieKey: 'vsf-locale', + pwa: { + meta: { + theme_color: '#5ECE7B', + }, }, - }, - pwa: { - meta: { - theme_color: '#5ECE7B', + styleResources: { + scss: [require.resolve('@storefront-ui/shared/styles/_helpers.scss', { paths: [process.cwd()] })], }, - }, - googleFonts: { - families: { - Raleway: { - wght: [300, 400, 500, 600, 700], - ital: [400], - }, - Roboto: { - wght: [300, 400, 500, 700], - ital: [300, 400], + build: { + extractCSS: true, + optimizeCSS: true, + parallel: true, + extend(cfg) { + // eslint-disable-next-line no-param-reassign + cfg.devtool = 'source-map'; }, - }, - display: 'swap', - }, - styleResources: { - scss: [require.resolve('@storefront-ui/shared/styles/_helpers.scss', { paths: [process.cwd()] })], - }, - build: { - babel: { plugins: [ - ['@babel/plugin-proposal-private-methods', { loose: true }], + new webpack.DefinePlugin({ + 'process.VERSION': JSON.stringify({ + // eslint-disable-next-line global-require + version: require('./package.json').version, + lastCommit: process.env.LAST_COMMIT || '', + }), + }), + ], + transpile: [ + 'vee-validate', + 'lodash-es', + /^@storefront-ui/, ], }, - transpile: [ - 'vee-validate/dist/rules', - ], plugins: [ - new webpack.DefinePlugin({ - 'process.VERSION': JSON.stringify({ - // eslint-disable-next-line global-require - version: require('./package.json').version, - lastCommit: process.env.LAST_COMMIT || '', - }), - }), + '~/plugins/token-expired', + '~/plugins/i18n', + '~/plugins/fcPlugin', + '~/plugins/dompurify', + '~/plugins/storeConfigPlugin', ], - extend(cfg, ctx) { - // eslint-disable-next-line no-param-reassign - cfg.devtool = ctx.isClient ? 'eval-source-map' : 'inline-source-map'; - - if (ctx && ctx.isClient) { - // eslint-disable-next-line no-param-reassign - cfg.optimization = { - ...cfg.optimization, - mergeDuplicateChunks: true, - splitChunks: { - ...cfg.optimization.splitChunks, - automaticNameDelimiter: '.', - chunks: 'all', - enforceSizeThreshold: 40_000, - maxAsyncRequests: 30, - maxInitialRequests: 30, - maxSize: 128_000, - minChunks: 1, - minSize: 0, - cacheGroups: { - ...cfg.optimization.splitChunks.cacheGroups, - vendor: { - test: /[/\\]node_modules[/\\]/, - reuseExistingChunk: true, - name: (module) => `${module - .context - .match(/[/\\]node_modules[/\\](.*?)([/\\]|$)/)[1] - .replace(/[.@_]/gm, '')}`, - }, - }, - }, - }; - } + serverMiddleware: [ + '~/serverMiddleware/body-parser.js', + ], + router: { + prefetchLinks: false, + extendRoutes(routes) { + getRoutes() + .forEach((route) => routes.unshift(route)); + }, }, - }, - router: { - extendRoutes(routes) { - getRoutes(`${__dirname}`).forEach((route) => routes.unshift(route)); + image: { + provider: process.env.VSF_IMAGE_PROVIDER, }, - }, + env: { + VSF_MAGENTO_GRAPHQL_URL: process.env.VSF_MAGENTO_GRAPHQL_URL, + }, + publicRuntimeConfig: { + middlewareUrl: process.env.VSF_MIDDLEWARE_URL || 'http://localhost:3000/api/', + ssrMiddlewareUrl: process.env.VSF_SSR_MIDDLEWARE_URL + || process.env.VSF_MIDDLEWARE_URL + || 'http://localhost:3000/api/', + }, + }; + + if (process.env.VSF_IMAGE_PROVIDER === 'cloudinary') { + baseConfig.image.cloudinary = { + baseURL: process.env.VSF_IMAGE_PROVIDER_BASE_URL, + }; + + if (process.env.VSF_IMAGE_PROVIDER_DOMAIN) { + const preconnectConfig = [ + { + rel: 'preconnect', + href: process.env.VSF_IMAGE_PROVIDER_DOMAIN, + crossorigin: true, + }, + { + rel: 'dns-prefetch', + href: process.env.VSF_IMAGE_PROVIDER_DOMAIN, + }, + ]; + + baseConfig.head.link.push(...preconnectConfig); + } + } + + if (process.env.VSF_RECAPTCHA_ENABLED === 'true') { + baseConfig.modules.push('@nuxtjs/recaptcha'); + + baseConfig.recaptcha = { + hideBadge: Boolean(process.env.VSF_RECAPTCHA_HIDE_BADGE), // Hide badge element (v3 & v2 via size=invisible) + siteKey: process.env.VSF_RECAPTCHA_SITE_KEY, // Site key for requests + version: Number(process.env.VSF_RECAPTCHA_VERSION), // Version 2 or 3 + size: process.env.VSF_RECAPTCHA_SIZE, // Size: 'compact', 'normal', 'invisible' (v2) + }; + + baseConfig.publicRuntimeConfig = { + ...baseConfig.publicRuntimeConfig, + isRecaptcha: process.env.VSF_RECAPTCHA_ENABLED === 'true', + }; + } + + if (await probeGoogleFontsApi()) { + baseConfig.build.plugins.push(new GoogleFontsPlugin({ + fonts: [ + { family: 'Raleway', variants: ['300', '400', '500', '600', '700', '400italic'], display: 'swap' }, + { family: 'Roboto', variants: ['300', '400', '500', '700', '300italic', '400italic'], display: 'swap' }, + ], + name: 'fonts', + filename: 'fonts.css', + path: 'assets/fonts/', + local: true, + formats: ['eot', 'woff', 'woff2', 'ttf', 'svg'], + apiUrl: GOOGLE_FONT_API_URL, + })); + } + + return baseConfig; }; diff --git a/package.json b/package.json index e118b6b..4966f67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vue-storefront/magento-theme", - "version": "1.0.0-rc.4.3", + "version": "1.1.0", "private": true, "license": "MIT", "homepage": "https://github.com/vuestorefront/magento2", @@ -8,15 +8,19 @@ "url": "https://github.com/vuestorefront/magento2/issues" }, "scripts": { - "build": "nuxt build -m", - "build:analyze": "nuxt build -a -m", - "dev": "nuxt", + "build": "nuxt build --modern=client", + "build:analyze": "nuxt build -a --modern=client", + "dev": "nuxt --env.NODE_TLS_REJECT_UNAUTHORIZED=0", + "dev:debug": "node --inspect ../../node_modules/.bin/nuxt dev", "generate": "nuxt generate", "lint": "eslint . --ext .ts,.vue", "lint:fix": "eslint . --ext .ts,.vue --fix", "precommit": "lint-staged", - "start": "nuxt start", + "start": "nuxt start --modern=client", + "start:local": "nuxt start --modern=client --env.NODE_TLS_REJECT_UNAUTHORIZED=0", "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", "test:e2e": "cypress open --config-file tests/e2e/cypress.json", "test:e2e:generate:report": "yarn -s mochawesome-merge \"tests/e2e/report/*.json\" > \"tests/e2e/report.json\" && yarn -s marge tests/e2e/report.json -o \"tests/e2e/report\"", "test:e2e:hl": "cypress run --headless --config-file tests/e2e/cypress.json", @@ -24,74 +28,84 @@ "update:update": "ncu -u" }, "dependencies": { + "@beyonk/google-fonts-webpack-plugin": "^1.7", + "@nuxt/image": "^0.7.1", + "@nuxtjs/composition-api": "^0.31.0", + "@nuxtjs/device": "^2.1.0", "@nuxtjs/pwa": "^3.3.5", - "@nuxtjs/google-fonts": "^1.3.0", + "@nuxtjs/recaptcha": "^1.1.1", "@nuxtjs/style-resources": "^1.2.1", - "@storefront-ui/vue": "^0.11.0", - "@vue-storefront/core": "~2.4.5", - "@vue-storefront/magento": "1.0.0-rc.4.3", - "@vue-storefront/middleware": "~2.4.5", - "@vue-storefront/nuxt": "~2.4.5", - "@vue-storefront/nuxt-theme": "~2.4.5", - "convict": "^6.2.1", - "convict-format-with-validator": "^6.2.0", - "cookie-universal-nuxt": "^2.1.5", + "@pinia/nuxt": "^0.1.9", + "@storefront-ui/vue": "^0.13.3", + "@vue-storefront/cache": "~2.7.1", + "@vue-storefront/http-cache": "^2.7.1", + "@vue-storefront/magento-api": "^1.1.0", + "@vue-storefront/middleware": "~2.7.1", + "@vue-storefront/nuxt": "~2.7.1", + "@vue-storefront/redis-cache": "^1.0.1", + "axios": "^0.26.1", + "body-parser": "1.20.0", + "body-scroll-lock": "^3.1.5", + "cookie-universal-nuxt": "^2.2.1", "deepdash": "^5.3.9", - "lodash.debounce": "^4.0.8", - "lodash.merge": "^4.6.2", + "express": "4.18.1", + "is-https": "^4.0.0", + "isomorphic-dompurify": "^0.20.0", + "lodash-es": "^4.17.21", "nuxt": "^2.15.8", "nuxt-i18n": "^6.28.0", "omit-deep": "^0.3.0", - "pm2": "^5.1.2", - "vee-validate": "^3.4.13", - "vue-demi": "0.11.4", - "vue-dompurify-html": "^2.3.0", + "pinia": "^2.0.14", + "pm2": "^5.2.0", + "vee-validate": "^3.4.14", + "vue": "2.6.14", + "vue-demi": "0.13.1", "vue-lazy-hydration": "^2.0.0-beta.4", - "vue-scrollto": "^2.20.0" + "vue-scrollto": "^2.20.0", + "vue-server-renderer": "2.6.14", + "vue-template-compiler": "2.6.14" }, "devDependencies": { + "@babel/core": "^7.18.6", "@nuxt/types": "latest", - "@nuxt/typescript-build": "latest", - "@vue/test-utils": "^1.2.2", + "@nuxt/typescript-build": "^2.1.0", + "@pinia/testing": "^0.0.12", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/user-event": "^14.2.1", + "@testing-library/vue": "^5.8.3", + "@types/lodash-es": "^4.17.6", + "@vue/runtime-dom": "^3.2.37", + "@vue/test-utils": "^1.3.0", "babel-core": "7.0.0-bridge.0", - "babel-jest": "^27.3.1", - "cypress": "^8.6.0", + "babel-jest": "^28.1.2", + "cypress": "^10.3.0", "cypress-pipe": "^2.0.0", "cypress-tags": "^0.3.0", - "dotenv": "^10.0.0", - "ejs": "^3.1.6", - "jest": "^27.3.1", + "deepmerge": "^4.2.2", + "ejs": "^3.1.8", + "jest": "^27.5.1", "jest-date-mock": "^1.0.8", - "jest-environment-jsdom-sixteen": "^2.0.0", - "jest-localstorage-mock": "^2.4.18", + "jest-localstorage-mock": "^2.4.21", "jest-silent-reporter": "^0.5.0", "jest-transform-stub": "^2.0.0", "jest-watch-toggle-config": "^2.0.1", - "jest-watch-typeahead": "^1.0.0", - "lint-staged": "^11.2.4", + "jest-watch-typeahead": "^1.1.0", + "lint-staged": "^13.0.3", "majestic": "^1.8.1", - "mochawesome": "^6.3.1", - "mochawesome-merge": "^4.2.0", - "mochawesome-report-generator": "^5.2.0", - "npm-check-updates": "^11.8.5", - "rollup-plugin-terser": "^7.0.2", - "ts-jest": "^27.0.7", + "mocha": "^9.2.0", + "mochawesome": "^7.1.3", + "mochawesome-merge": "^4.2.1", + "mochawesome-report-generator": "^6.2.0", + "npm-check-updates": "^15.0.4", + "ts-jest": "^28.0.5", "ts-loader": "^8.1.0", - "tslib": "^2.3.1", - "typescript": "^4.4.4", - "vue-jest": "^4.0.0-0", - "webpack": "^4.46.0" - }, - "peerDependencies": { - "@vue/composition-api": "1.0.0-beta.21", - "vue": "^2.0.0 || >=3.0.0-rc.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "ts-node": "^10.8.2", + "tslib": "^2.4.0", + "typescript": "^4.7.4", + "vue-jest": "^3.0.7", + "webpack": "4.46.0" }, "engines": { - "node": ">=14.x" + "node": "^16.13" } } diff --git a/pages/Category.vue b/pages/Category.vue deleted file mode 100644 index 0c28611..0000000 --- a/pages/Category.vue +++ /dev/null @@ -1,986 +0,0 @@ - - - - - diff --git a/pages/Checkout/ExternalCheckoutThankYou.vue b/pages/Checkout/ExternalCheckoutThankYou.vue deleted file mode 100644 index 5f3e999..0000000 --- a/pages/Checkout/ExternalCheckoutThankYou.vue +++ /dev/null @@ -1,277 +0,0 @@ - - - - diff --git a/pages/Cms.vue b/pages/Cms.vue new file mode 100644 index 0000000..2ad0d2b --- /dev/null +++ b/pages/Cms.vue @@ -0,0 +1,72 @@ + + + diff --git a/pages/Home.vue b/pages/Home.vue index 7adcc07..a16ef3b 100644 --- a/pages/Home.vue +++ b/pages/Home.vue @@ -1,17 +1,17 @@ - - + - - - - + + - - + + - - - + + - + - @@ -262,7 +235,7 @@ export default defineComponent({ .article-item__meta-item:not(:last-child)::after { display: inline-block; - content: ""; + content: ''; width: 5px; height: 5px; margin: -1px 10px 0 10px; @@ -281,9 +254,8 @@ export default defineComponent({ } } -.hero { +.hero-section { margin: var(--spacer-xl) auto var(--spacer-lg); - --hero-item-background-position: center; ::v-deep .sf-link:hover { color: var(--c-white); @@ -292,23 +264,6 @@ export default defineComponent({ @include for-desktop { margin: var(--spacer-xl) auto var(--spacer-2xl); } - - .sf-hero-item { - &:nth-child(even) { - --hero-item-background-position: left; - @include for-mobile { - --hero-item-background-position: 30%; - --hero-item-wrapper-text-align: right; - --hero-item-subtitle-width: 100%; - --hero-item-title-width: 100%; - --hero-item-wrapper-padding: var(--spacer-sm) var(--spacer-sm) var(--spacer-sm) var(--spacer-2xl); - } - } - } -} - -::v-deep .sf-hero__controls { - --hero-controls-display: none; } .banner-grid { @@ -361,6 +316,10 @@ export default defineComponent({ } } +.products { + margin-top: var(--spacer-base); +} + .carousel { margin: 0 calc(-1 * var(--spacer-sm)) 0 0; @include for-desktop { diff --git a/pages/MyAccount.vue b/pages/MyAccount.vue deleted file mode 100644 index f210198..0000000 --- a/pages/MyAccount.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - diff --git a/pages/MyAccount/AddressesDetails.vue b/pages/MyAccount/AddressesDetails.vue deleted file mode 100644 index f990473..0000000 --- a/pages/MyAccount/AddressesDetails.vue +++ /dev/null @@ -1,247 +0,0 @@ - - - - diff --git a/pages/MyAccount/BillingDetails.vue b/pages/MyAccount/BillingDetails.vue deleted file mode 100644 index b7971ea..0000000 --- a/pages/MyAccount/BillingDetails.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - diff --git a/pages/MyAccount/LoyaltyCard.vue b/pages/MyAccount/LoyaltyCard.vue deleted file mode 100644 index a7dc121..0000000 --- a/pages/MyAccount/LoyaltyCard.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/pages/MyAccount/MyProfile.vue b/pages/MyAccount/MyProfile.vue deleted file mode 100644 index 30974c7..0000000 --- a/pages/MyAccount/MyProfile.vue +++ /dev/null @@ -1,168 +0,0 @@ - - - - - diff --git a/pages/MyAccount/MyReviews.vue b/pages/MyAccount/MyReviews.vue deleted file mode 100644 index 277d789..0000000 --- a/pages/MyAccount/MyReviews.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/pages/MyAccount/MyWishlist.vue b/pages/MyAccount/MyWishlist.vue deleted file mode 100644 index 1ac04b5..0000000 --- a/pages/MyAccount/MyWishlist.vue +++ /dev/null @@ -1,560 +0,0 @@ - - - - - diff --git a/pages/MyAccount/OrderHistory.vue b/pages/MyAccount/OrderHistory.vue deleted file mode 100644 index 6d0f18e..0000000 --- a/pages/MyAccount/OrderHistory.vue +++ /dev/null @@ -1,328 +0,0 @@ - - - - - diff --git a/pages/MyAccount/ShippingDetails.vue b/pages/MyAccount/ShippingDetails.vue deleted file mode 100644 index fea9dc8..0000000 --- a/pages/MyAccount/ShippingDetails.vue +++ /dev/null @@ -1,213 +0,0 @@ - - - - diff --git a/pages/Page.vue b/pages/Page.vue index 0f777b7..0a5a0f7 100644 --- a/pages/Page.vue +++ b/pages/Page.vue @@ -1,68 +1,40 @@ - - diff --git a/pages/Shipping.vue b/pages/Shipping.vue deleted file mode 100644 index 69daa27..0000000 --- a/pages/Shipping.vue +++ /dev/null @@ -1,371 +0,0 @@ - - - - - diff --git a/plugins/__tests__/fcPlugin.spec.js b/plugins/__tests__/fcPlugin.spec.js new file mode 100644 index 0000000..f436451 --- /dev/null +++ b/plugins/__tests__/fcPlugin.spec.js @@ -0,0 +1,10 @@ +import fcPlugin from '~/plugins/fcPlugin'; + +const injectFnMock = jest.fn(); + +describe('Format currency plugin', () => { + it('should inject $fc', () => { + fcPlugin({ app: {} }, injectFnMock); + expect(injectFnMock).toHaveBeenCalledTimes(1); + }); +}); diff --git a/plugins/__tests__/i18n.spec.js b/plugins/__tests__/i18n.spec.js new file mode 100644 index 0000000..c88aa53 --- /dev/null +++ b/plugins/__tests__/i18n.spec.js @@ -0,0 +1,125 @@ +import i18nPlugin from '~/plugins/i18n'; + +const localesMock = [ + { + code: 'default', + file: 'en.js', + iso: 'en_US', + defaultCurrency: 'USD', + }, + { + code: 'de_DE', + file: 'de.js', + iso: 'de_DE', + defaultCurrency: 'EUR', + }, + { + code: 'nl_NL', + file: 'en.js', + iso: 'en_US', + defaultCurrency: 'EUR', + }, +]; + +const apiStateMock = { + getCurrency: () => 'USD', + getCountry: () => 'PL', + getCartId: () => '123', + getCustomerToken: () => '12fg45', +}; + +const callbackRequest = { + headers: {}, +}; + +const routeMock = { + path: '/german', +}; +const appMock = { + i18n: { + defaultLocale: 'en', + defaultCurrency: 'EUR', + setLocale: jest.fn(), + locales: localesMock, + locale: 'de_DE', + }, + $vsf: { + $magento: { + client: { + interceptors: { + request: { + use: (callback) => { + callback(callbackRequest); + }, + }, + }, + }, + config: { + state: { + ...apiStateMock, + setStore: jest.fn(), + getStore: jest.fn(), + setLocale: jest.fn(), + getLocale: jest.fn(), + setCurrency: jest.fn(), + }, + axios: { + headers: { + cookie: null, + }, + }, + }, + }, + }, +}; + +describe('i18n plugin', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('Should read vsf-store cookie value', () => { + i18nPlugin({ app: appMock, route: routeMock }); + + expect(appMock.$vsf.$magento.config.state.getStore).toHaveBeenCalled(); + }); + + it('Should find locale based on magento store code', () => { + appMock.$vsf.$magento.config.state.getStore.mockReturnValue('default'); + i18nPlugin({ app: appMock, route: routeMock }); + + expect(appMock.i18n.setLocale).not.toHaveBeenCalled(); + }); + + it('Should set default locale when there is no locale that match given magento store code', () => { + appMock.$vsf.$magento.config.state.getStore('pl_PL'); + expect(appMock.i18n.setLocale).not.toHaveBeenCalled(); + }); + + it('Should set default locale when vsf-store cookie doesn\'t exist', () => { + i18nPlugin({ app: appMock, route: routeMock }); + + expect(appMock.i18n.setLocale).toHaveBeenCalledWith('en'); + }); + + it('Should change locale if a new selected store has a different locale', () => { + const testCaseAppMock = { + ...appMock, + i18n: { + ...appMock.i18n, + locale: 'de_DE', + }, + }; + + testCaseAppMock.$vsf.$magento.config.state.getStore.mockReturnValueOnce('de_DE').mockReturnValueOnce('default'); + + i18nPlugin({ app: testCaseAppMock, route: routeMock }); + + expect(testCaseAppMock.$vsf.$magento.config.state.setLocale).toHaveBeenCalledWith('de_DE'); + expect(testCaseAppMock.$vsf.$magento.config.state.setStore).toHaveBeenCalledWith('de_DE'); + expect(testCaseAppMock.$vsf.$magento.config.state.setCurrency).toHaveBeenCalledWith('EUR'); + expect(callbackRequest.headers.cookie).toMatchInlineSnapshot( + '"vsf-store=de_DE; vsf-locale=de_DE; vsf-currency=EUR; vsf-country=PL; vsf-customer=12fg45; vsf-cart=123 "', + ); + }); +}); diff --git a/plugins/__tests__/token-expired.spec.js b/plugins/__tests__/token-expired.spec.js new file mode 100644 index 0000000..f59a34e --- /dev/null +++ b/plugins/__tests__/token-expired.spec.js @@ -0,0 +1,112 @@ +import { createPinia, setActivePinia } from 'pinia'; +import { useCustomerStore } from '~/modules/customer/stores/customer'; +import tokenExpiredPlugin from '../token-expired'; + +const errRes = { + data: { + errors: [ + { + extensions: { + category: 'graphql-authorization', + }, + }, + ], + }, +}; + +const validRes = { + data: { + errors: [], + }, +}; + +const appMockFactory = (callbackResponse, authResponse) => ({ + $vsf: { + $magento: { + client: { + interceptors: { + response: { + use: (callback) => { + callback(callbackResponse); + }, + }, + }, + }, + api: { + customQuery: jest.fn(() => authResponse), + }, + config: { + state: { + getCustomerToken: jest.fn(), + removeCustomerToken: jest.fn(), + removeCartId: jest.fn(), + setMessage: jest.fn(), + }, + }, + }, + }, + $cookies: { + remove: jest.fn(), + set: jest.fn(), + }, + router: { + push: jest.fn(), + }, + localePath: jest.fn(), + i18n: { + t: jest.fn(), + }, +}); + +describe('Token Expired plugin', () => { + beforeEach(() => { + jest.resetAllMocks(); + setActivePinia(createPinia()); + }); + + it('sets initial login status', async () => { + const appMock = appMockFactory(validRes, validRes); + appMock.$vsf.$magento.config.state.getCustomerToken.mockReturnValue(true); + const customerStore = useCustomerStore(); + jest.spyOn(customerStore, 'setIsLoggedIn'); + + await tokenExpiredPlugin({ app: appMock }); + + expect(customerStore.setIsLoggedIn).toHaveBeenCalledWith(true); + }); + + it('doesn\'t set initial login status if not logged in', async () => { + const appMock = appMockFactory(validRes, errRes.data); // need .data because it's ApolloGraphQlResponse, not axios + appMock.$vsf.$magento.config.state.getCustomerToken.mockReturnValue(false); + const customerStore = useCustomerStore(); + + await tokenExpiredPlugin({ app: appMock }); + + expect(customerStore.isLoggedIn).toBe(false); + }); + + it('should be executed only if there is the "graphql-authorization" error', async () => { + const appMock = appMockFactory(validRes); + + await tokenExpiredPlugin({ app: appMock }); + + expect(appMock.router.push).toHaveBeenCalledTimes(0); + }); + + it('should set message cookie', async () => { + const appMock = appMockFactory(errRes); + + await tokenExpiredPlugin({ app: appMock }); + + expect(appMock.$vsf.$magento.config.state.setMessage).toHaveBeenCalledWith(expect.any(Object)); + }); + + it('should clear customer token and clear cart id', async () => { + const appMock = appMockFactory(errRes); + + await tokenExpiredPlugin({ app: appMock }); + + expect(appMock.$vsf.$magento.config.state.removeCustomerToken).toHaveBeenCalled(); + expect(appMock.$vsf.$magento.config.state.removeCustomerToken).toHaveBeenCalledWith(); + }); +}); diff --git a/plugins/domPurify.js b/plugins/domPurify.js deleted file mode 100644 index a4ff4ae..0000000 --- a/plugins/domPurify.js +++ /dev/null @@ -1,4 +0,0 @@ -import Vue from 'vue'; -import VueDOMPurifyHTML from 'vue-dompurify-html'; - -Vue.use(VueDOMPurifyHTML); diff --git a/plugins/dompurify.ts b/plugins/dompurify.ts new file mode 100644 index 0000000..f1316e1 --- /dev/null +++ b/plugins/dompurify.ts @@ -0,0 +1,15 @@ +import { unescape } from 'lodash-es'; +import DOMPurify from 'isomorphic-dompurify'; +import type { Plugin } from '@nuxt/types'; + +declare module 'vue/types/vue' { + interface Vue { + $dompurify(html: string): string; + } +} + +const plugin : Plugin = (_, inject) => { + inject('dompurify', (html: string): string => unescape(DOMPurify.sanitize(html))); +}; + +export default plugin; diff --git a/plugins/fcPlugin.ts b/plugins/fcPlugin.ts new file mode 100644 index 0000000..80a0044 --- /dev/null +++ b/plugins/fcPlugin.ts @@ -0,0 +1,30 @@ +import { Plugin } from '@nuxt/types'; +import formatCurrency from '~/helpers/formatCurrency'; + +interface FormatCurrency { + $fc(value: number | string): string; + $fc(value: number | string, options?: Intl.NumberFormatOptions): string; + $fc(value: number | string, locale?: string, options?: Intl.NumberFormatOptions): string; +} + +declare module 'vue/types/vue' { + interface Vue extends FormatCurrency { + } +} + +declare module '@nuxt/types' { + interface Context extends FormatCurrency { + } +} + +const plugin : Plugin = (context, inject) => { + inject('fc', (value: number | string, locale?: string, options = {}): string => { + // eslint-disable-next-line no-param-reassign + locale = (locale || context.i18n?.localeProperties?.iso || '').replace('_', '-'); + // eslint-disable-next-line no-param-reassign + options = { currency: context.app.$vsf.$magento.config.state.getCurrency() || context.i18n?.localeProperties?.defaultCurrency, ...options }; + return formatCurrency(value, locale, options); + }); +}; + +export default plugin; diff --git a/plugins/i18n.ts b/plugins/i18n.ts new file mode 100644 index 0000000..d6367b8 --- /dev/null +++ b/plugins/i18n.ts @@ -0,0 +1,68 @@ +import { Context, NuxtAppOptions } from '@nuxt/types'; +import { LocaleObject } from 'nuxt-i18n'; + +const findLocaleBasedOnMagentoStoreCode = (storeCode: string, locales: Array) => locales.find((locale) => ((typeof locale === 'object' ? locale.code : locale) === storeCode)); + +const findCurrencyBasedOnMagentoStoreCode = (storeCode: string, locales: Array): string => { + const match = locales.find((locale) => typeof locale === 'object' && locale.code === storeCode) as LocaleObject | undefined; + return match?.defaultCurrency; +}; + +/** + * Prepare new cookie string based on app state. + * + * @param app {NuxtAppOptions} + * @param newStoreCode {string} + * @param currency {string} + * @returns {string} + */ +const prepareNewCookieString = (app: NuxtAppOptions, newStoreCode: string, currency: string) => { + const apiState = app.$vsf.$magento.config.state; + const customerTokenCookie = apiState.getCustomerToken(); + const cartIdCookie = apiState.getCartId(); + + let cookie = `vsf-store=${newStoreCode}; `; + cookie += `vsf-locale=${newStoreCode}; `; + cookie += `vsf-currency=${currency}; `; + cookie += `vsf-country=${apiState.getCountry()}; `; + + if (customerTokenCookie) { + cookie += `vsf-customer=${customerTokenCookie}; `; + } + + if (cartIdCookie) { + cookie += `vsf-cart=${cartIdCookie} `; + } + + return cookie; +}; + +export default ({ app, route }: Context) => app.$vsf.$magento.client.interceptors.request.use(async (request) => { + const { + $vsf: { $magento: { config: { state } } }, + i18n, + } = app; + + const currentStoreCode = app.$vsf.$magento.config.state.getStore() ?? route.path.split('/')[1]; // localhost:3000/default + const shouldSetDefaultLocale = !currentStoreCode || !findLocaleBasedOnMagentoStoreCode(currentStoreCode, i18n.locales); + + if (shouldSetDefaultLocale) { + await i18n.setLocale(i18n.defaultLocale); + } + + const i18nCurrentLocaleCode = i18n.locale; + const shouldLocaleBeRefreshed = i18nCurrentLocaleCode !== state.getLocale(); + + if (shouldLocaleBeRefreshed) { + const currency = findCurrencyBasedOnMagentoStoreCode(i18nCurrentLocaleCode, i18n.locales); + + state.setStore(i18nCurrentLocaleCode); + state.setLocale(i18nCurrentLocaleCode); + state.setCurrency(currency); + + // eslint-disable-next-line no-param-reassign + request.headers.cookie = prepareNewCookieString(app, i18nCurrentLocaleCode, currency); + } + + return request; +}); diff --git a/plugins/query/StoreConfig.gql.ts b/plugins/query/StoreConfig.gql.ts new file mode 100644 index 0000000..8bcadb9 --- /dev/null +++ b/plugins/query/StoreConfig.gql.ts @@ -0,0 +1,18 @@ +/** GraphQL Query that fetches store configuration from the API */ +export const StoreConfigQuery = ` + query storeConfig { + storeConfig { + store_code, + default_title, + store_name, + default_display_currency_code, + locale, + header_logo_src, + logo_width, + logo_height, + logo_alt + } + } +`; + +export default StoreConfigQuery; diff --git a/plugins/storeConfigPlugin.ts b/plugins/storeConfigPlugin.ts new file mode 100644 index 0000000..5ad475c --- /dev/null +++ b/plugins/storeConfigPlugin.ts @@ -0,0 +1,24 @@ +import { PiniaPluginContext } from 'pinia'; +import { Plugin } from '@nuxt/types'; +import { ref, set } from '@nuxtjs/composition-api'; +import StoreConfigGql from '~/plugins/query/StoreConfig.gql'; +import type { StoreConfig } from '~/modules/GraphQL/types'; + +const storeConfigPlugin: Plugin = async ({ $pinia, app }) => { + const { data }: { data: { storeConfig?: StoreConfig } } = await app.$vsf.$magento.api.customQuery({ query: StoreConfigGql }); + + $pinia.use(({ store }: PiniaPluginContext) => { + if (store.$id !== 'magentoConfig') return; + const storeConfig = ref(data?.storeConfig ?? {}); + + // eslint-disable-next-line no-prototype-builtins + if (!store.$state.hasOwnProperty('storeConfig')) { + set(store.$state, 'storeConfig', storeConfig); + } else { + // eslint-disable-next-line no-param-reassign + store.$state.storeConfig = storeConfig; + } + }); +}; + +export default storeConfigPlugin; diff --git a/plugins/token-expired.ts b/plugins/token-expired.ts new file mode 100644 index 0000000..d628b9b --- /dev/null +++ b/plugins/token-expired.ts @@ -0,0 +1,37 @@ +import type { Plugin } from '@nuxt/types'; +import type { ApolloQueryResult } from '@apollo/client/core/types'; +import type { UiNotification } from '~/composables/useUiNotification'; +import { useCustomerStore } from '~/modules/customer/stores/customer'; + +export const hasGraphqlAuthorizationError = (res: ApolloQueryResult) => res?.errors + ?.some((error) => error?.extensions?.category === 'graphql-authorization') ?? false; + +const plugin : Plugin = ({ $pinia, app }) => { + const customerStore = useCustomerStore($pinia); + if (app.$vsf.$magento.config.state.getCustomerToken()) { + customerStore.setIsLoggedIn(true); + } + + app.$vsf.$magento.client.interceptors.response.use((res) => { + if (!hasGraphqlAuthorizationError(res.data as ApolloQueryResult)) { + return res; + } + customerStore.setIsLoggedIn(false); + app.$vsf.$magento.config.state.removeCustomerToken(); + app.$vsf.$magento.config.state.removeCartId(); + app.$vsf.$magento.config.state.setMessage({ + id: Symbol(''), + message: app.i18n.t('You are not authorized, please log in.') as string, + type: 'warning', + icon: null, + persist: true, + title: null, + }); + + app.router.push(app.localePath('/')); + + return false; + }); +}; + +export default plugin; diff --git a/routes.js b/routes.js index 420730d..994f737 100644 --- a/routes.js +++ b/routes.js @@ -1,73 +1,17 @@ -const path = require('path'); +import path from 'node:path'; +import url from 'node:url'; -export function getRoutes(themeDir = __dirname) { - return [{ - name: 'home', - path: '/', - component: path.resolve(themeDir, 'pages/Home.vue'), - }, - { - name: 'product', - path: '/p/:id/:slug/', - component: path.resolve(themeDir, 'pages/Product.vue'), - }, - { - name: 'category', - path: '/c/:slug_1/:slug_2?/:slug_3?/:slug_4?/:slug_5?', - component: path.resolve(themeDir, 'pages/Category.vue'), - }, - { - name: 'my-account', - path: '/my-account/:pageName?', - component: path.resolve(themeDir, 'pages/MyAccount.vue'), - }, - { - name: 'checkout', - path: '/checkout', - component: path.resolve(themeDir, 'pages/Checkout.vue'), - children: [ - { - path: 'user-account', - name: 'user-account', - component: path.resolve(themeDir, 'pages/Checkout/UserAccount.vue'), - }, - { - path: 'shipping', - name: 'shipping', - component: path.resolve(themeDir, 'pages/Checkout/Shipping.vue'), - }, - { - path: 'billing', - name: 'billing', - component: path.resolve(themeDir, 'pages/Checkout/Billing.vue'), - }, - { - path: 'payment', - name: 'payment', - component: path.resolve(themeDir, 'pages/Checkout/Payment.vue'), - }, - { - path: 'thank-you', - name: 'thank-you', - component: path.resolve(themeDir, 'pages/Checkout/ThankYou.vue'), - }, - { - path: 'external-thank-you', - name: 'external-thank-you', - component: path.resolve(themeDir, 'pages/Checkout/ExternalCheckoutThankYou.vue'), - }, - ], - }, - { - name: 'reset-password', - path: '/reset-password', - alias: '/customer/account/createPassword', - component: path.resolve(themeDir, 'pages/ResetPassword.vue'), - }, - { - name: 'page', - path: '/:slug+', - component: path.resolve(themeDir, 'pages/Page.vue'), - }, +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'), + }, ]; } diff --git a/serverMiddleware/body-parser.js b/serverMiddleware/body-parser.js new file mode 100644 index 0000000..b81616d --- /dev/null +++ b/serverMiddleware/body-parser.js @@ -0,0 +1,7 @@ +import bodyParser from 'body-parser'; +import express from 'express'; + +const app = express(); + +app.use(bodyParser.json()); +export default app; diff --git a/static/error/error.svg b/static/error/error.svg deleted file mode 100644 index e2d0756..0000000 --- a/static/error/error.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/static/favicon.ico b/static/favicon.ico index 479229d..143cf99 100644 Binary files a/static/favicon.ico and b/static/favicon.ico differ diff --git a/static/icon.png b/static/icon.png new file mode 100644 index 0000000..b19a968 Binary files /dev/null and b/static/icon.png differ diff --git a/static/icons/empty-cart.svg b/static/icons/empty-cart.svg deleted file mode 100644 index 83b0785..0000000 --- a/static/icons/empty-cart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/icons/facebook.svg b/static/icons/facebook.svg index 8dcb72b..a8de246 100644 --- a/static/icons/facebook.svg +++ b/static/icons/facebook.svg @@ -1,4 +1 @@ - - - - + diff --git a/static/icons/google.svg b/static/icons/google.svg index c3fe1f0..fcdae1d 100644 --- a/static/icons/google.svg +++ b/static/icons/google.svg @@ -1,10 +1 @@ - - - - - - - - - - + diff --git a/static/icons/langs/de.webp b/static/icons/langs/de_DE.webp similarity index 100% rename from static/icons/langs/de.webp rename to static/icons/langs/de_DE.webp diff --git a/static/icons/langs/en.webp b/static/icons/langs/en_US.webp similarity index 100% rename from static/icons/langs/en.webp rename to static/icons/langs/en_US.webp diff --git a/static/icons/langs/nl_NL.webp b/static/icons/langs/nl_NL.webp new file mode 100644 index 0000000..d21426e Binary files /dev/null and b/static/icons/langs/nl_NL.webp differ diff --git a/static/icons/logo.svg b/static/icons/logo.svg deleted file mode 100644 index c9efd08..0000000 --- a/static/icons/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/icons/pinterest.svg b/static/icons/pinterest.svg index f0527a7..dff5ed6 100644 --- a/static/icons/pinterest.svg +++ b/static/icons/pinterest.svg @@ -1,10 +1,6 @@ - - - - - - - - - + + + + + diff --git a/static/icons/twitter.svg b/static/icons/twitter.svg index 338994f..4f46186 100644 --- a/static/icons/twitter.svg +++ b/static/icons/twitter.svg @@ -1,10 +1 @@ - - - - - - - - - - + diff --git a/static/icons/youtube.svg b/static/icons/youtube.svg index 795eaed..4bfd222 100644 --- a/static/icons/youtube.svg +++ b/static/icons/youtube.svg @@ -1,10 +1,9 @@ - - - - - - - - - + + + + + + + + diff --git a/static/thank-you/bannerD.png b/static/thank-you/bannerD.png deleted file mode 100644 index de97105..0000000 Binary files a/static/thank-you/bannerD.png and /dev/null differ diff --git a/static/thank-you/bannerM.png b/static/thank-you/bannerM.png deleted file mode 100644 index 72b909c..0000000 Binary files a/static/thank-you/bannerM.png and /dev/null differ diff --git a/stores/config.ts b/stores/config.ts new file mode 100644 index 0000000..d383604 --- /dev/null +++ b/stores/config.ts @@ -0,0 +1,17 @@ +import { defineStore } from 'pinia'; +import { AvailableStores } from '~/composables/types'; +import { Currency, StoreConfig } from '~/modules/GraphQL/types'; + +interface ConfigState { + storeConfig: StoreConfig, + stores: AvailableStores + currency: Currency +} + +export const useConfigStore = defineStore('magentoConfig', { + state: (): ConfigState => ({ + storeConfig: {}, + stores: [], + currency: {}, + }), +}); diff --git a/stores/page.ts b/stores/page.ts new file mode 100644 index 0000000..741ddc6 --- /dev/null +++ b/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/tests/e2e/cypress.json b/tests/e2e/cypress.json index 3ef6351..a2c6904 100755 --- a/tests/e2e/cypress.json +++ b/tests/e2e/cypress.json @@ -2,7 +2,7 @@ "baseUrl": "http://localhost:3000", "fixturesFolder": "tests/e2e/fixtures", "integrationFolder": "tests/e2e/integration", - "pluginsFile": "tests/e2e/plugins/index.js", + "pluginsFile": "tests/e2e/plugins/index.ts", "supportFile": "tests/e2e/support/index.js", "viewportHeight": 1080, "viewportWidth": 1920, diff --git a/tests/e2e/integration/e2e-user-login.spec.ts b/tests/e2e/integration/e2e-user-login.spec.ts index 3c87409..2f939e0 100755 --- a/tests/e2e/integration/e2e-user-login.spec.ts +++ b/tests/e2e/integration/e2e-user-login.spec.ts @@ -1,6 +1,7 @@ import generator from '../utils/data-generator'; import page from '../pages/factory'; import requests from '../api/requests'; +import { Customer } from '../types/customer'; before(() => { cy.clearLocalStorage(); @@ -16,7 +17,7 @@ context(['regression'], 'User login', () => { const data = cy.fixtures.data['Should successfully login']; data.customer.email = generator.email; - requests.createCustomer(data.customer).then(() => { + requests.createCustomer(data.customer as Customer).then(() => { cy.clearCookies(); }); @@ -24,7 +25,7 @@ context(['regression'], 'User login', () => { page.home.header.openLoginModal(); page.components.loginModal.loginToAccountButton.click(); - page.components.loginModal.fillForm(data.customer); + page.components.loginModal.fillForm(data.customer as Customer); page.components.loginModal.loginBtn.click(); page.components.loginModal.container.should('not.exist'); page.home.header.account.click(); @@ -37,8 +38,8 @@ context(['regression'], 'User login', () => { page.home.visit(); page.home.header.openLoginModal(); page.components.loginModal.loginToAccountButton.click(); - page.components.loginModal.fillForm(data.customer); + page.components.loginModal.fillForm(data.customer as Customer); page.components.loginModal.loginBtn.click(); - page.components.loginModal.container.contains(data.errorMessage).should('be.visible'); + page.components.loginModal.container.contains(data.errorMessage as string).should('be.visible'); }); }); diff --git a/tests/e2e/integration/e2e-user-registration.spec.ts b/tests/e2e/integration/e2e-user-registration.spec.ts index 12977cd..3f90b4f 100755 --- a/tests/e2e/integration/e2e-user-registration.spec.ts +++ b/tests/e2e/integration/e2e-user-registration.spec.ts @@ -1,6 +1,7 @@ import generator from '../utils/data-generator'; import page from '../pages/factory'; import requests from '../api/requests'; +import { Customer } from '../types/customer'; before(() => { cy.fixture('test-data/e2e-user-registration.json').then((fixture) => { @@ -16,7 +17,7 @@ context(['regression'], 'User registration', () => { data.customer.email = generator.email; page.home.visit(); page.home.header.openLoginModal(); - page.components.loginModal.fillForm(data.customer); + page.components.loginModal.fillForm(data.customer as Customer); page.components.loginModal.iWantToCreateAccountCheckbox.click(); page.components.loginModal.submitButton.click(); page.components.loginModal.container.should('not.exist'); @@ -28,13 +29,13 @@ context(['regression'], 'User registration', () => { const data = cy.fixtures.data['Existing user - should display an error']; data.customer.email = generator.email; - requests.createCustomer(data.customer).then(() => { + requests.createCustomer(data.customer as Customer).then(() => { cy.clearCookies(); }); page.home.visit(); page.home.header.openLoginModal(); - page.components.loginModal.fillForm(data.customer); + page.components.loginModal.fillForm(data.customer as Customer); page.components.loginModal.iWantToCreateAccountCheckbox.click(); page.components.loginModal.submitButton.click(); page.components.loginModal.container.contains(`${data.errorMessage} '"${data.customer.email}"'`).should('be.visible'); diff --git a/tests/e2e/pages/checkout/Billing.ts b/tests/e2e/pages/checkout/Billing.ts new file mode 100644 index 0000000..dec8b7a --- /dev/null +++ b/tests/e2e/pages/checkout/Billing.ts @@ -0,0 +1,15 @@ +import { el } from '../utils/element'; + +export class Billing { + get continueToPaymentButton(): Cypress.Chainable { + return el('continue-to-payment'); + } + + get heading(): Cypress.Chainable { + return el('heading-billing'); + } + + get copyAddressLabel(): Cypress.Chainable { + return el('copy-address', 'label'); + } +} diff --git a/tests/e2e/pages/checkout/Payment.ts b/tests/e2e/pages/checkout/Payment.ts new file mode 100644 index 0000000..6b10347 --- /dev/null +++ b/tests/e2e/pages/checkout/Payment.ts @@ -0,0 +1,15 @@ +import { el } from '../utils/element'; + +export class Payment { + get makeAnOrderButton(): Cypress.Chainable { + return el('make-an-order'); + } + + get paymentMethods(): Cypress.Chainable { + return el('payment-method'); + } + + get terms(): Cypress.Chainable { + return el('terms', 'label'); + } +} diff --git a/tests/e2e/pages/checkout.ts b/tests/e2e/pages/checkout/Shipping.ts old mode 100755 new mode 100644 similarity index 65% rename from tests/e2e/pages/checkout.ts rename to tests/e2e/pages/checkout/Shipping.ts index e01fd94..fd3a22e --- a/tests/e2e/pages/checkout.ts +++ b/tests/e2e/pages/checkout/Shipping.ts @@ -1,7 +1,7 @@ -import { Customer } from '../types/customer'; -import { el } from './utils/element'; +import { Customer } from '../../types/customer'; +import { el } from '../utils/element'; -class Shipping { +export class Shipping { get firstName(): Cypress.Chainable { return el('firstName'); } @@ -66,44 +66,3 @@ class Shipping { this.phone.type(customer.address.shipping.phone); } } - -class Billing { - get continueToPaymentButton(): Cypress.Chainable { - return el('continue-to-payment'); - } - - get heading(): Cypress.Chainable { - return el('heading-billing'); - } - - get copyAddressLabel(): Cypress.Chainable { - return el('copy-address', 'label'); - } -} - -class Payment { - get makeAnOrderButton(): Cypress.Chainable { - return el('make-an-order'); - } - - get paymentMethods(): Cypress.Chainable { - return el('payment-method'); - } - - get terms(): Cypress.Chainable { - return el('terms', 'label'); - } -} - -class ThankYou { - get heading(): Cypress.Chainable { - return el('thank-you-banner', 'h2'); - } -} - -export { - Shipping, - Billing, - Payment, - ThankYou, -}; diff --git a/tests/e2e/pages/checkout/ThankYou.ts b/tests/e2e/pages/checkout/ThankYou.ts new file mode 100644 index 0000000..5293182 --- /dev/null +++ b/tests/e2e/pages/checkout/ThankYou.ts @@ -0,0 +1,7 @@ +import { el } from '../utils/element'; + +export class ThankYou { + get heading(): Cypress.Chainable { + return el('thank-you-banner', 'h2'); + } +} diff --git a/tests/e2e/pages/checkout/index.ts b/tests/e2e/pages/checkout/index.ts new file mode 100755 index 0000000..c23d6b7 --- /dev/null +++ b/tests/e2e/pages/checkout/index.ts @@ -0,0 +1,4 @@ +export { Billing } from './Billing'; +export { Shipping } from './Shipping'; +export { Payment } from './Payment'; +export { ThankYou } from './ThankYou'; diff --git a/tests/e2e/pages/components/header.ts b/tests/e2e/pages/components/header.ts index 126d846..2c28372 100755 --- a/tests/e2e/pages/components/header.ts +++ b/tests/e2e/pages/components/header.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { el } from '../utils/element'; class Header { @@ -23,6 +24,7 @@ class Header { openCart(): Cypress.Chainable { const click = ($el) => $el.click(); return this.cart.pipe(click).should(() => { + // eslint-disable-next-line jest/no-standalone-expect,no-unused-expressions,@typescript-eslint/no-unused-expressions,jest/valid-expect expect(Cypress.$('[data-e2e="sidebar-cart"]')).to.exist; }); } @@ -30,6 +32,7 @@ class Header { openLoginModal(): Cypress.Chainable { const click = ($el) => $el.click(); return this.account.pipe(click).should(() => { + // eslint-disable-next-line jest/no-standalone-expect,no-unused-expressions,@typescript-eslint/no-unused-expressions,jest/valid-expect expect(Cypress.$('[data-e2e="login-modal"]')).to.exist; }); } diff --git a/tests/e2e/plugins/index.js b/tests/e2e/plugins/index.js deleted file mode 100755 index 70b6427..0000000 --- a/tests/e2e/plugins/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// eslint-disable-next-line spaced-comment -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -const tagify = require('cypress-tags'); - -/** - * @type {Cypress.PluginConfig} - */ -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config - on('file:preprocessor', tagify(config)); -}; diff --git a/tests/e2e/plugins/index.ts b/tests/e2e/plugins/index.ts new file mode 100755 index 0000000..753679d --- /dev/null +++ b/tests/e2e/plugins/index.ts @@ -0,0 +1,11 @@ +/* eslint-disable unicorn/prefer-module */ +// using import does not work since cypress-tags is commonjs +const tagify = require('cypress-tags'); + +const pluginConfig : Cypress.PluginConfig = (on, config) => { + // tagify does not ship types + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + on('file:preprocessor', tagify(config)); +}; + +export default pluginConfig; diff --git a/tests/e2e/support/commands.js b/tests/e2e/support/commands.js index 9ce9016..ee201e1 100755 --- a/tests/e2e/support/commands.js +++ b/tests/e2e/support/commands.js @@ -1,4 +1,5 @@ /* eslint-disable no-undef */ +/* eslint-disable unicorn/no-empty-file */ // *********************************************** // This example commands.js shows you how to // create various custom commands and overwrite diff --git a/tests/e2e/support/index.js b/tests/e2e/support/index.js index 9500306..a542f97 100755 --- a/tests/e2e/support/index.js +++ b/tests/e2e/support/index.js @@ -26,10 +26,9 @@ import addContext from 'mochawesome/addContext'; Cypress.on('test:after:run', (test, runnable) => { if (test.state === 'failed') { const screenshot = `assets/screenshots/${Cypress.spec.name}/${runnable.parent.title} -- ${test.title} (failed).png`; - addContext({test}, { + addContext({ test }, { title: 'Screenshot', - value: screenshot + value: screenshot, }); } }); - diff --git a/tests/e2e/tsconfig.json b/tests/e2e/tsconfig.json new file mode 100644 index 0000000..ba5517d --- /dev/null +++ b/tests/e2e/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress"] + }, +} diff --git a/tests/unit/cmsContent.spec.ts b/tests/unit/cmsContent.spec.ts new file mode 100644 index 0000000..9e9b13e --- /dev/null +++ b/tests/unit/cmsContent.spec.ts @@ -0,0 +1,14 @@ +import { render } from '~/tests/unit/test-utils'; +import { Content, cmsContentMock } from '~/tests/unit/mocks/cmsContentMock'; + +// eslint-disable-next-line jest/no-export +export const cmsContentTest = (component) => { + test.each(cmsContentMock as Content[])( + '$received should be displayed as $expected', + ({ received, expected }) => { + const { getByText } = render(component, { props: { content: received } }); + + expect(getByText(expected)).toBeDefined(); + }, + ); +}; diff --git a/tests/unit/mocks/cartGetters.js b/tests/unit/mocks/cartGetters.js new file mode 100644 index 0000000..dce24f7 --- /dev/null +++ b/tests/unit/mocks/cartGetters.js @@ -0,0 +1,11 @@ +import { ProductStockStatus } from '~/modules/GraphQL/types'; + +export const cartGettersMock = (extend = {}) => ({ + getItems: jest.fn(() => []), + getTotals: jest.fn(() => 0), + getTotalItems: jest.fn(), + getStockStatus: jest.fn(() => ProductStockStatus.InStock), + ...extend, +}); + +export default cartGettersMock; diff --git a/tests/unit/mocks/categoryFiltersMock.ts b/tests/unit/mocks/categoryFiltersMock.ts new file mode 100644 index 0000000..06e49c8 --- /dev/null +++ b/tests/unit/mocks/categoryFiltersMock.ts @@ -0,0 +1,44 @@ +import type { Aggregation } from '~/modules/GraphQL/types'; + +export const categoryFiltersData: Aggregation[] = [ + { + label: 'Pattern', + count: 2, + attribute_code: 'pattern', + position: 0, + options: [ + { + count: 11, + label: 'Solid', + value: '196', + }, + { + count: 1, + label: '194', + value: '194', + }, + ], + }, + { + label: 'Category', + count: 7, + attribute_code: 'category_id', + position: 1, + options: [ + { + count: 12, + label: 'Women', + value: '20', + }, + { + count: 12, + label: 'Tops', + value: '21', + }, + ], + }, +]; + +export const categoryFiltersDataWithOneOption: Aggregation = Object.assign(categoryFiltersData[0], { + options: [categoryFiltersData[0].options[0]], +}); diff --git a/tests/unit/mocks/categoryNavbarMock.ts b/tests/unit/mocks/categoryNavbarMock.ts new file mode 100644 index 0000000..95b2cf9 --- /dev/null +++ b/tests/unit/mocks/categoryNavbarMock.ts @@ -0,0 +1,35 @@ +import { Pagination } from '~/composables/types'; + +export const paginationData: Pagination = { + currentPage: 1, + totalPages: 2, + totalItems: 11, + itemsPerPage: 10, + pageOptions: [10, 50, 100], +}; + +export const sortByData = { + options: [ + { + 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', + }, + ], + selected: 'name_DESC', +}; diff --git a/tests/unit/mocks/categoryTreeDataMock.ts b/tests/unit/mocks/categoryTreeDataMock.ts new file mode 100644 index 0000000..0e60dd9 --- /dev/null +++ b/tests/unit/mocks/categoryTreeDataMock.ts @@ -0,0 +1,867 @@ +import { CategoryTree } from '~/modules/GraphQL/types'; + +export const categoryTreeData: CategoryTree[] = [ + { + is_anchor: 1, + name: 'Default Category', + position: 1, + product_count: 187, + uid: 'Mg==', + url_path: null, + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 0, + name: 'What\'s New', + position: 1, + product_count: 0, + uid: 'Mzg=', + url_path: 'what-is-new', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [], + }, + { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + ], + }, + { + is_anchor: 0, + name: 'Men', + position: 3, + product_count: 0, + uid: 'MTE=', + url_path: 'men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 48, + uid: 'MTI=', + url_path: 'men/tops-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 11, + uid: 'MTQ=', + url_path: 'men/tops-men/jackets-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 13, + uid: 'MTU=', + url_path: 'men/tops-men/hoodies-and-sweatshirts-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MTY=', + url_path: 'men/tops-men/tees-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Tanks', + position: 4, + product_count: 12, + uid: 'MTc=', + url_path: 'men/tops-men/tanks-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 24, + uid: 'MTM=', + url_path: 'men/bottoms-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 12, + uid: 'MTg=', + url_path: 'men/bottoms-men/pants-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'MTk=', + url_path: 'men/bottoms-men/shorts-men', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + ], + }, + { + is_anchor: 0, + name: 'Gear', + position: 4, + product_count: 34, + uid: 'Mw==', + url_path: 'gear', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Bags', + position: 1, + product_count: 14, + uid: 'NA==', + url_path: 'gear/bags', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [], + }, + { + is_anchor: 1, + name: 'Fitness Equipment', + position: 2, + product_count: 11, + uid: 'NQ==', + url_path: 'gear/fitness-equipment', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [], + }, + { + is_anchor: 1, + name: 'Watches', + position: 3, + product_count: 9, + uid: 'Ng==', + url_path: 'gear/watches', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [], + }, + ], + }, + { + is_anchor: 0, + name: 'Training', + position: 5, + product_count: 6, + uid: 'OQ==', + url_path: 'training', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Video Download', + position: 1, + product_count: 6, + uid: 'MTA=', + url_path: 'training/training-video', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [], + }, + ], + }, + { + is_anchor: 0, + name: 'Sale', + position: 6, + product_count: 0, + uid: 'Mzc=', + url_path: 'sale', + url_suffix: '.html', + include_in_menu: 0, + redirect_code: 301, + children: [], + }, + ], + }, +]; + +export const defaultCategoryTreeData = [ + { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + ], + }, + { + is_anchor: 0, + name: 'Men', + position: 3, + product_count: 0, + uid: 'MTE=', + url_path: 'men', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 48, + uid: 'MTI=', + url_path: 'men/tops-men', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 11, + uid: 'MTQ=', + url_path: 'men/tops-men/jackets-men', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 13, + uid: 'MTU=', + url_path: 'men/tops-men/hoodies-and-sweatshirts-men', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MTY=', + url_path: 'men/tops-men/tees-men', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tanks', + position: 4, + product_count: 12, + uid: 'MTc=', + url_path: 'men/tops-men/tanks-men', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 24, + uid: 'MTM=', + url_path: 'men/bottoms-men', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 12, + uid: 'MTg=', + url_path: 'men/bottoms-men/pants-men', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'MTk=', + url_path: 'men/bottoms-men/shorts-men', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + ], + }, + { + is_anchor: 0, + name: 'Gear', + position: 4, + product_count: 34, + uid: 'Mw==', + url_path: 'gear', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Bags', + position: 1, + product_count: 14, + uid: 'NA==', + url_path: 'gear/bags', + url_suffix: '.html', + include_in_menu: 1, + children: [], + }, + { + is_anchor: 1, + name: 'Fitness Equipment', + position: 2, + product_count: 11, + uid: 'NQ==', + url_path: 'gear/fitness-equipment', + url_suffix: '.html', + include_in_menu: 1, + children: [], + }, + { + is_anchor: 1, + name: 'Watches', + position: 3, + product_count: 9, + uid: 'Ng==', + url_path: 'gear/watches', + url_suffix: '.html', + include_in_menu: 1, + children: [], + }, + ], + }, + { + is_anchor: 0, + name: 'Training', + position: 5, + product_count: 6, + uid: 'OQ==', + url_path: 'training', + url_suffix: '.html', + include_in_menu: 1, + children: [], + }, +]; + +export const womanCategoryTreeData = { + currentItems: { + value: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + ], + }, + current: { + value: { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + ], + }, + }, + history: { + value: [ + { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + }, + ], + }, + ], + }, + ], + }, +}; + +export default categoryTreeData; diff --git a/tests/unit/mocks/cmsContentMock.ts b/tests/unit/mocks/cmsContentMock.ts new file mode 100644 index 0000000..990712a --- /dev/null +++ b/tests/unit/mocks/cmsContentMock.ts @@ -0,0 +1,119 @@ +export type Content = { + received: string; + expected: string; +}; + +export const cmsContentMock: Content[] = [ + { + received: '
Lorem Ipsum
', + expected: 'Lorem Ipsum', + }, + { + received: '
Lorem<Ipsum
', + expected: 'LoremLorem>Ipsum', + expected: 'Lorem>Ipsum', + }, + { + received: '
Lorem&Ipsum
', + expected: 'Lorem&Ipsum', + }, + { + received: '
"Lorem Ipsum"
', + expected: '"Lorem Ipsum"', + }, + { + received: '
'Lorem Ipsum'
', + expected: '\'Lorem Ipsum\'', + }, + { + received: '
¢50
', + expected: '¢50', + }, + { + received: '
£50
', + expected: '£50', + }, + { + received: '
¥50
', + expected: '¥50', + }, + { + received: '
€50
', + expected: '€50', + }, + { + received: '
©Lorem Ipsum
', + expected: '©Lorem Ipsum', + }, + { + received: '
Lorem Ipsum®
', + expected: 'Lorem Ipsum®', + }, + { + received: '
Lorem Ipsum
', + expected: 'Lorem Ipsum', + }, + { + received: '
Lorem<Ipsum
', + expected: 'LoremLorem>Ipsum', + expected: 'Lorem>Ipsum', + }, + { + received: '
Lorem&Ipsum
', + expected: 'Lorem&Ipsum', + }, + { + received: '
"Lorem Ipsum"
', + expected: '"Lorem Ipsum"', + }, + { + received: '
'Lorem Ipsum'
', + expected: '\'Lorem Ipsum\'', + }, + { + received: '
¢50
', + expected: '¢50', + }, + { + received: '
£50
', + expected: '£50', + }, + { + received: '
¥50
', + expected: '¥50', + }, + { + received: '
€50
', + expected: '€50', + }, + { + received: '
©Lorem Ipsum
', + expected: '©Lorem Ipsum', + }, + { + received: '
Lorem Ipsum®
', + expected: 'Lorem Ipsum®', + }, + { + received: '
', + expected: 'à', + }, + { + received: '
', + expected: 'á', + }, + { + received: '
', + expected: 'â', + }, + { + received: '
', + expected: 'ã', + }, +]; diff --git a/tests/unit/mocks/index.js b/tests/unit/mocks/index.js new file mode 100644 index 0000000..22f9ed0 --- /dev/null +++ b/tests/unit/mocks/index.js @@ -0,0 +1,12 @@ +export * from './useBilling'; +export * from './useCart'; +export * from './useCountrySearch'; +export * from './useForgotPassword'; +export * from './useGuestUser'; +export * from './useShipping'; +export * from './useUiState'; +export * from './useUser'; +export * from './useUserBilling'; +export * from './useReview'; +export * from './cartGetters'; +export * from './useCartView'; diff --git a/tests/unit/mocks/injectMock.ts b/tests/unit/mocks/injectMock.ts new file mode 100644 index 0000000..bf676be --- /dev/null +++ b/tests/unit/mocks/injectMock.ts @@ -0,0 +1,6 @@ +export const injectMock = (extend = {}) => ({ + isFilterSelected: jest.fn( + (id: string, optVal: string): boolean => id === optVal, + ), + ...extend, +}); diff --git a/tests/unit/mocks/removableFiltersMock.ts b/tests/unit/mocks/removableFiltersMock.ts new file mode 100644 index 0000000..813aa16 --- /dev/null +++ b/tests/unit/mocks/removableFiltersMock.ts @@ -0,0 +1,27 @@ +export type RemovableFilter = { + [key: string]: string; +}; + +export const removableFiltersData: RemovableFilter[] = [ + { + id: 'new', + name: 'New', + label: '1', + value: '1', + type: 'yes_no', + }, + { + id: 'climate', + name: 'Climate', + label: 'All-Weather', + value: '201', + type: 'checkbox', + }, + { + id: 'color', + name: 'Color', + label: 'Black', + value: '49', + type: 'swatch_color', + }, +]; diff --git a/tests/unit/mocks/useBilling.js b/tests/unit/mocks/useBilling.js new file mode 100644 index 0000000..905745c --- /dev/null +++ b/tests/unit/mocks/useBilling.js @@ -0,0 +1,16 @@ +export const useBillingMock = (billingData = {}) => ({ + load: () => {}, + save: () => {}, + loading: { + value: false, + }, + billing: { + value: {}, + }, + address: { + value: {}, + }, + ...billingData, +}); + +export default useBillingMock; diff --git a/tests/unit/mocks/useCart.js b/tests/unit/mocks/useCart.js new file mode 100644 index 0000000..f0d7c62 --- /dev/null +++ b/tests/unit/mocks/useCart.js @@ -0,0 +1,408 @@ +import { ref } from '@nuxtjs/composition-api'; + +const createError = () => ref({ + addItem: null, + removeItem: null, + updateItemQty: null, + load: null, + clear: null, + applyCoupon: null, + removeCoupon: null, + loadTotalQty: null, +}); + +export const useEmptyCartMock = (cartData = {}) => ({ + load: jest.fn(), + loading: false, + removeItem: jest.fn(), + updateItemQty: jest.fn(), + loadTotalQty: jest.fn(() => 0), + cart: { + value: {}, + }, + error: createError(), + ...cartData, +}); + +export const useCartMock = (cartData = {}) => ({ + load: jest.fn(), + loading: false, + removeItem: jest.fn(), + updateItemQty: jest.fn(), + loadTotalQty: jest.fn(() => 2), + error: createError(), + cart: { + value: { + prices: { + __typename: 'CartPrices', + subtotal_excluding_tax: { + __typename: 'Money', + value: 107, + }, + subtotal_including_tax: { + __typename: 'Money', + value: 107, + }, + applied_taxes: [], + discounts: null, + grand_total: { + __typename: 'Money', + value: 107, + }, + }, + items: [ + { + __typename: 'Product1', + uid: 'NDUw', + product: { + __typename: 'Product1', + uid: 'MTAzNA==', + sku: 'Product1', + name: 'Product1', + stock_status: 'OUT_OF_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', + url: 'https://xxx.jpg', + position: null, + disabled: null, + label: 'Product1', + }, + url_key: 'product-1', + url_rewrites: [ + { + __typename: 'UrlRewrite', + url: 'product-1.html', + }, + ], + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + }, + }, + categories: [ + { + __typename: 'CategoryTree', + uid: 'MTM=', + name: 'Bottoms', + + url_suffix: '.html', + url_path: 'men/bottoms-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MTk=', + name: 'Shorts', + url_suffix: '.html', + url_path: 'men/bottoms-men/shorts-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + { + __typename: 'Breadcrumb', + category_name: 'Bottoms', + category_url_path: 'men/bottoms-men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MzE=', + name: 'Men Sale', + url_suffix: '.html', + url_path: 'promotions/men-sale', + breadcrumbs: null, + }, + ], + review_count: 0, + reviews: { + __typename: 'ProductReviews', + items: [], + }, + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + __typename: 'Money', + value: 27, + }, + row_total_including_tax: { + __typename: 'Money', + value: 27, + }, + total_item_discount: { + __typename: 'Money', + value: 0, + }, + }, + quantity: 1, + configurable_options: [ + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvOTM=', + option_label: 'Color', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzkzLzQ5', + value_label: 'Black', + }, + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvMTQ0', + option_label: 'Size', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzE0NC8xNzc=', + value_label: '34', + }, + ], + }, + { + __typename: 'Product2', + uid: 'NDUw2', + product: { + __typename: 'Product2', + uid: 'MTAzNA==', + sku: 'Product2', + name: 'Product2', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', + url: 'https://xxx.jpg', + position: null, + disabled: null, + label: 'Product2', + }, + url_key: 'product-2', + url_rewrites: [ + { + __typename: 'UrlRewrite', + url: 'product-2.html', + }, + ], + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + }, + }, + categories: [ + { + __typename: 'CategoryTree', + uid: 'MTM=', + name: 'Bottoms', + url_suffix: '.html', + url_path: 'men/bottoms-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MTk=', + name: 'Shorts', + url_suffix: '.html', + url_path: 'men/bottoms-men/shorts-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + { + __typename: 'Breadcrumb', + category_name: 'Bottoms', + category_url_path: 'men/bottoms-men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MzE=', + name: 'Men Sale', + url_suffix: '.html', + url_path: 'promotions/men-sale', + breadcrumbs: null, + }, + ], + review_count: 0, + reviews: { + __typename: 'ProductReviews', + items: [], + }, + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + __typename: 'Money', + value: 10, + }, + row_total_including_tax: { + __typename: 'Money', + value: 10, + }, + total_item_discount: { + __typename: 'Money', + value: 0, + }, + }, + quantity: 1, + configurable_options: [ + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvOTM=', + option_label: 'Color', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzkzLzQ5', + value_label: 'Black', + }, + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvMTQ0', + option_label: 'Size', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzE0NC8xNzc=', + value_label: '34', + }, + ], + }, + { + uid: 'MjYwNw==', + product: { + 0: {}, + uid: 'NDY=', + __typename: 'BundleProduct', + sku: '24-WG080', + name: 'Sprite Yoga Companion Kit', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + url: 'https://magento2demo.frodigo.com/media/catalog/product/cache/6008460c710ac4e87d1a4c53dc478d67/l/u/luma-yoga-kit-2.jpg', position: null, disabled: null, label: 'Sprite Yoga Companion Kit', __typename: 'ProductImage', + }, + url_key: 'sprite-yoga-companion-kit', + url_rewrites: [{ url: 'sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }, { url: 'gear/sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }, { url: 'gear/fitness-equipment/sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }], + price_range: { maximum_price: { final_price: { currency: 'USD', value: 77, __typename: 'Money' }, regular_price: { currency: 'USD', value: 77, __typename: 'Money' }, __typename: 'ProductPrice' }, minimum_price: { final_price: { currency: 'USD', value: 61, __typename: 'Money' }, regular_price: { currency: 'USD', value: 61, __typename: 'Money' }, __typename: 'ProductPrice' }, __typename: 'PriceRange' }, + categories: [{ + uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, __typename: 'CategoryTree', + }, { + uid: 'NQ==', name: 'Fitness Equipment', url_suffix: '.html', url_path: 'gear/fitness-equipment', breadcrumbs: [{ category_name: 'Gear', category_url_path: 'gear', __typename: 'Breadcrumb' }], __typename: 'CategoryTree', + }], + review_count: 0, + reviews: { items: [], __typename: 'ProductReviews' }, + original_sku: '24-WG080', + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + value: 70, + __typename: 'Money', + }, + row_total_including_tax: { + value: 70, + __typename: 'Money', + }, + total_item_discount: { + value: 0, + __typename: 'Money', + }, + }, + quantity: 1, + bundle_options: [{ + uid: 'YnVuZGxlLzE=', + label: 'Sprite Stasis Ball', + type: 'radio', + values: [{ + id: 3, label: 'Sprite Stasis Ball 75 cm', price: 32, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzI=', + label: 'Sprite Foam Yoga Brick', + type: 'radio', + values: [{ + id: 4, label: 'Sprite Foam Yoga Brick', price: 5, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzM=', + label: 'Sprite Yoga Strap', + type: 'radio', + values: [{ + id: 5, label: 'Sprite Yoga Strap 6 foot', price: 14, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzQ=', + label: 'Sprite Foam Roller', + type: 'radio', + values: [{ + id: 8, label: 'Sprite Foam Roller', price: 19, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }], + __typename: 'BundleCartItem', + }], + total_quantity: 2, + }, + }, + ...cartData, +}); diff --git a/tests/unit/mocks/useCartView.js b/tests/unit/mocks/useCartView.js new file mode 100644 index 0000000..2a52327 --- /dev/null +++ b/tests/unit/mocks/useCartView.js @@ -0,0 +1,409 @@ +import cartGettersMock from '~/tests/unit/mocks/cartGetters'; + +export const useCartViewMock = (cartViewData = {}) => ({ + showRemoveItemModal: jest.fn(), + removeItemAndSendNotification: jest.fn(), + delayedUpdateItemQty: jest.fn(), + goToCheckout: jest.fn(), + getAttributes: jest.fn((product) => product.configurable_options || []), + getBundles: jest.fn((product) => product.bundle_options?.map((b) => b.values).flat() || []), + isInStock: jest.fn((product) => product.product.stock_status === 'IN_STOCK'), + getMagentoImage: jest.fn(() => ''), + getProductPath: jest.fn(() => ''), + loading: false, + isAuthenticated: false, + products: [ + { + __typename: 'Product1', + uid: 'NDUw', + product: { + __typename: 'Product1', + uid: 'MTAzNA==', + sku: 'Product1', + name: 'Product1', + stock_status: 'OUT_OF_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', + url: 'https://xxx.jpg', + position: null, + disabled: null, + label: 'Product1', + }, + url_key: 'product-1', + url_rewrites: [ + { + __typename: 'UrlRewrite', + url: 'product-1.html', + }, + ], + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 27, + }, + }, + }, + categories: [ + { + __typename: 'CategoryTree', + uid: 'MTM=', + name: 'Bottoms', + + url_suffix: '.html', + url_path: 'men/bottoms-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MTk=', + name: 'Shorts', + url_suffix: '.html', + url_path: 'men/bottoms-men/shorts-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + { + __typename: 'Breadcrumb', + category_name: 'Bottoms', + category_url_path: 'men/bottoms-men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MzE=', + name: 'Men Sale', + url_suffix: '.html', + url_path: 'promotions/men-sale', + breadcrumbs: null, + }, + ], + review_count: 0, + reviews: { + __typename: 'ProductReviews', + items: [], + }, + original_sku: '24-WG083', + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + __typename: 'Money', + value: 27, + }, + row_total_including_tax: { + __typename: 'Money', + value: 27, + }, + total_item_discount: { + __typename: 'Money', + value: 0, + }, + }, + quantity: 1, + configurable_options: [ + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvOTM=', + option_label: 'Color', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzkzLzQ5', + value_label: 'Black', + }, + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvMTQ0', + option_label: 'Size', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzE0NC8xNzc=', + value_label: '34', + }, + ], + }, + { + __typename: 'Product2', + uid: 'NDUw2', + product: { + __typename: 'Product2', + uid: 'MTAzNA==', + sku: 'Product2', + name: 'Product2', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + __typename: 'ProductImage', + url: 'https://xxx.jpg', + position: null, + disabled: null, + label: 'Product2', + }, + url_key: 'product-2', + url_rewrites: [ + { + __typename: 'UrlRewrite', + url: 'product-2.html', + }, + ], + price_range: { + __typename: 'PriceRange', + maximum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + }, + minimum_price: { + __typename: 'ProductPrice', + final_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + regular_price: { + __typename: 'Money', + currency: 'USD', + value: 10, + }, + }, + }, + categories: [ + { + __typename: 'CategoryTree', + uid: 'MTM=', + name: 'Bottoms', + url_suffix: '.html', + url_path: 'men/bottoms-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MTk=', + name: 'Shorts', + url_suffix: '.html', + url_path: 'men/bottoms-men/shorts-men', + breadcrumbs: [ + { + __typename: 'Breadcrumb', + category_name: 'Men', + category_url_path: 'men', + }, + { + __typename: 'Breadcrumb', + category_name: 'Bottoms', + category_url_path: 'men/bottoms-men', + }, + ], + }, + { + __typename: 'CategoryTree', + uid: 'MzE=', + name: 'Men Sale', + url_suffix: '.html', + url_path: 'promotions/men-sale', + breadcrumbs: null, + }, + ], + review_count: 0, + reviews: { + __typename: 'ProductReviews', + items: [], + }, + original_sku: '24-WG081', + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + __typename: 'Money', + value: 10, + }, + row_total_including_tax: { + __typename: 'Money', + value: 10, + }, + total_item_discount: { + __typename: 'Money', + value: 0, + }, + }, + quantity: 1, + configurable_options: [ + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvOTM=', + option_label: 'Color', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzkzLzQ5', + value_label: 'Black', + }, + { + __typename: 'SelectedConfigurableOption', + configurable_product_option_uid: 'Y29uZmlndXJhYmxlLzEwMzQvMTQ0', + option_label: 'Size', + configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzE0NC8xNzc=', + value_label: '34', + }, + ], + }, + { + uid: 'MjYwNw==', + product: { + 0: {}, + uid: 'NDY=', + __typename: 'BundleProduct', + sku: '24-WG080', + name: 'Sprite Yoga Companion Kit', + stock_status: 'IN_STOCK', + only_x_left_in_stock: null, + rating_summary: 0, + thumbnail: { + url: 'https://magento2demo.frodigo.com/media/catalog/product/cache/6008460c710ac4e87d1a4c53dc478d67/l/u/luma-yoga-kit-2.jpg', position: null, disabled: null, label: 'Sprite Yoga Companion Kit', __typename: 'ProductImage', + }, + url_key: 'sprite-yoga-companion-kit', + url_rewrites: [{ url: 'sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }, { url: 'gear/sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }, { url: 'gear/fitness-equipment/sprite-yoga-companion-kit.html', __typename: 'UrlRewrite' }], + price_range: { maximum_price: { final_price: { currency: 'USD', value: 77, __typename: 'Money' }, regular_price: { currency: 'USD', value: 77, __typename: 'Money' }, __typename: 'ProductPrice' }, minimum_price: { final_price: { currency: 'USD', value: 61, __typename: 'Money' }, regular_price: { currency: 'USD', value: 61, __typename: 'Money' }, __typename: 'ProductPrice' }, __typename: 'PriceRange' }, + categories: [{ + uid: 'Mw==', name: 'Gear', url_suffix: '.html', url_path: 'gear', breadcrumbs: null, __typename: 'CategoryTree', + }, { + uid: 'NQ==', name: 'Fitness Equipment', url_suffix: '.html', url_path: 'gear/fitness-equipment', breadcrumbs: [{ category_name: 'Gear', category_url_path: 'gear', __typename: 'Breadcrumb' }], __typename: 'CategoryTree', + }], + review_count: 0, + reviews: { items: [], __typename: 'ProductReviews' }, + original_sku: '24-WG080', + }, + prices: { + __typename: 'CartItemPrices', + row_total: { + value: 70, + __typename: 'Money', + }, + row_total_including_tax: { + value: 70, + __typename: 'Money', + }, + total_item_discount: { + value: 0, + __typename: 'Money', + }, + }, + quantity: 1, + bundle_options: [{ + uid: 'YnVuZGxlLzE=', + label: 'Sprite Stasis Ball', + type: 'radio', + values: [{ + id: 3, label: 'Sprite Stasis Ball 75 cm', price: 32, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzI=', + label: 'Sprite Foam Yoga Brick', + type: 'radio', + values: [{ + id: 4, label: 'Sprite Foam Yoga Brick', price: 5, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzM=', + label: 'Sprite Yoga Strap', + type: 'radio', + values: [{ + id: 5, label: 'Sprite Yoga Strap 6 foot', price: 14, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }, { + uid: 'YnVuZGxlLzQ=', + label: 'Sprite Foam Roller', + type: 'radio', + values: [{ + id: 8, label: 'Sprite Foam Roller', price: 19, quantity: 1, __typename: 'SelectedBundleOptionValue', + }], + __typename: 'SelectedBundleOption', + }], + __typename: 'BundleCartItem', + }], + isRemoveModalVisible: false, + itemToRemove: null, + totals: { + total: 107, + subtotal: 107, + special: 107, + }, + totalItems: 2, + imageSizes: { + productCard: { + width: 216, + height: 268, + }, + productCardHorizontal: { + width: 140, + height: 200, + }, + checkout: { + imageWidth: 100, + imageHeight: 100, + }, + productGallery: { + thumbWidth: 160, + thumbHeight: 160, + imageWidth: 1080, + imageHeight: 1340, + }, + cart: { + imageWidth: 170, + imageHeight: 170, + }, + }, + discount: null, + cartGetters: cartGettersMock({ + getItemImage: jest.fn(), + getItemName: jest.fn(), + getItemPrice: jest.fn(() => ({ regular: 10, special: 10 })), + productHasSpecialPrice: jest.fn(() => false), + getItemQty: jest.fn(() => 1), + }), + ...cartViewData, +}); diff --git a/tests/unit/mocks/useCategoryStore.ts b/tests/unit/mocks/useCategoryStore.ts new file mode 100644 index 0000000..b8938ea --- /dev/null +++ b/tests/unit/mocks/useCategoryStore.ts @@ -0,0 +1,6 @@ +export const useCategoryStoreMock = (extend = {}) => ({ + categories: [], + ...extend, +}); + +export default useCategoryStoreMock; diff --git a/tests/unit/mocks/useContext.ts b/tests/unit/mocks/useContext.ts new file mode 100644 index 0000000..0e38028 --- /dev/null +++ b/tests/unit/mocks/useContext.ts @@ -0,0 +1,9 @@ +export const useContextMock = (extend = {}) => ({ + app: { + localePath: jest.fn((val) => val), + }, + localePath: jest.fn((val) => val), + ...extend, +}); + +export default useContextMock; diff --git a/tests/unit/mocks/useCountrySearch.js b/tests/unit/mocks/useCountrySearch.js new file mode 100644 index 0000000..6831aad --- /dev/null +++ b/tests/unit/mocks/useCountrySearch.js @@ -0,0 +1,5 @@ +export const useCountrySearchMock = (countrySearchData = {}) => ({ + ...countrySearchData, +}); + +export default useCountrySearchMock; diff --git a/tests/unit/mocks/useCurrency.ts b/tests/unit/mocks/useCurrency.ts new file mode 100644 index 0000000..b5507ba --- /dev/null +++ b/tests/unit/mocks/useCurrency.ts @@ -0,0 +1,11 @@ +import { ref } from '@nuxtjs/composition-api'; + +export const useCurrencyMock = { + currency: ref({}), + load: jest.fn(), + change: jest.fn(), + error: ref({ + load: null, + change: null, + }), +}; diff --git a/tests/unit/mocks/useForgotPassword.js b/tests/unit/mocks/useForgotPassword.js new file mode 100644 index 0000000..17b56ec --- /dev/null +++ b/tests/unit/mocks/useForgotPassword.js @@ -0,0 +1,11 @@ +import { ref } from '@nuxtjs/composition-api'; + +export const useForgotPasswordMock = (passwordData = {}) => ({ + result: ref({}), + setNew: jest.fn(), + error: ref({}), + loading: ref(false), + ...passwordData, +}); + +export default useForgotPasswordMock; diff --git a/tests/unit/mocks/useGuestUser.js b/tests/unit/mocks/useGuestUser.js new file mode 100644 index 0000000..55121b7 --- /dev/null +++ b/tests/unit/mocks/useGuestUser.js @@ -0,0 +1,17 @@ +export const useGuestUserMock = (questUserData = {}) => ({ + loading: { + value: false, + }, + error: { + value: { + attachToCart: null, + }, + }, + attachToCart: jest.fn(), + guestUser: { + value: null, + }, + ...questUserData, +}); + +export default useGuestUserMock; diff --git a/tests/unit/mocks/useReview.js b/tests/unit/mocks/useReview.js new file mode 100644 index 0000000..4c74a01 --- /dev/null +++ b/tests/unit/mocks/useReview.js @@ -0,0 +1,26 @@ +export const useReviewMock = (reviewData = {}) => ({ + loading: { + value: false, + }, + loadReviewMetadata: jest.fn(), + metadata: { + value: [ + { + id: 'METADATA_ID', + name: 'METADATA_NAME', + values: [ + { + value_id: '1', + value: 'VALUE 1', + }, + ], + }, + ], + }, + error: { + value: {}, + }, + ...reviewData, +}); + +export default useReviewMock; diff --git a/tests/unit/mocks/useRoute.ts b/tests/unit/mocks/useRoute.ts new file mode 100644 index 0000000..54c41d2 --- /dev/null +++ b/tests/unit/mocks/useRoute.ts @@ -0,0 +1,9 @@ +export const useRouteMock = (extend = {}) => ({ + value: { + path: '/default/gear.html', + fullPath: '/default/gear.html', + }, + ...extend, +}); + +export default useRouteMock; diff --git a/tests/unit/mocks/useRouter.ts b/tests/unit/mocks/useRouter.ts new file mode 100644 index 0000000..6b21727 --- /dev/null +++ b/tests/unit/mocks/useRouter.ts @@ -0,0 +1,6 @@ +export const useRouterMock = (extend = {}) => ({ + push: jest.fn((val) => val), + ...extend, +}); + +export default useRouterMock; diff --git a/tests/unit/mocks/useShipping.js b/tests/unit/mocks/useShipping.js new file mode 100644 index 0000000..a05155d --- /dev/null +++ b/tests/unit/mocks/useShipping.js @@ -0,0 +1,5 @@ +export const useShippingMock = (shippingData = {}) => ({ + ...shippingData, +}); + +export default useShippingMock; diff --git a/tests/unit/mocks/useStore.ts b/tests/unit/mocks/useStore.ts new file mode 100644 index 0000000..3739c14 --- /dev/null +++ b/tests/unit/mocks/useStore.ts @@ -0,0 +1,11 @@ +import { ref } from '@nuxtjs/composition-api'; + +export const useStoreMock = { + stores: ref([]), + load: jest.fn(), + change: jest.fn(), + error: ref({ + load: null, + change: null, + }), +}; diff --git a/tests/unit/mocks/useTraverseCategoryMock.ts b/tests/unit/mocks/useTraverseCategoryMock.ts new file mode 100644 index 0000000..ef61ad9 --- /dev/null +++ b/tests/unit/mocks/useTraverseCategoryMock.ts @@ -0,0 +1,193 @@ +import { ref } from '@nuxtjs/composition-api'; +import type { CategoryTree } from '~/modules/GraphQL/types'; + +export const categoryAncestorsFirstLevelMock: CategoryTree[] = [ + { + is_anchor: 1, + name: 'Women', + position: 2, + product_count: 75, + uid: 'MjA=', + url_path: 'women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + { + is_anchor: 1, + name: 'Bottoms', + position: 2, + product_count: 25, + uid: 'MjI=', + url_path: 'women/bottoms-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Pants', + position: 1, + product_count: 13, + uid: 'Mjc=', + url_path: 'women/bottoms-women/pants-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Shorts', + position: 2, + product_count: 12, + uid: 'Mjg=', + url_path: 'women/bottoms-women/shorts-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + }, + ], + }, +]; + +export const categoryAncestorsSecondLevelMock = [ + ...categoryAncestorsFirstLevelMock, + { + is_anchor: 1, + name: 'Tops', + position: 1, + product_count: 50, + uid: 'MjE=', + url_path: 'women/tops-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + children: [ + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Hoodies & Sweatshirts', + position: 2, + product_count: 12, + uid: 'MjQ=', + url_path: 'women/tops-women/hoodies-and-sweatshirts-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Tees', + position: 3, + product_count: 12, + uid: 'MjU=', + url_path: 'women/tops-women/tees-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + { + is_anchor: 1, + name: 'Bras & Tanks', + position: 4, + product_count: 14, + uid: 'MjY=', + url_path: 'women/tops-women/tanks-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + }, + ], + } as CategoryTree, +]; + +export const categoryAncestorsThirdLevelMock = [ + ...categoryAncestorsSecondLevelMock, + { + is_anchor: 1, + name: 'Jackets', + position: 1, + product_count: 12, + uid: 'MjM=', + url_path: 'women/tops-women/jackets-women', + url_suffix: '.html', + include_in_menu: 1, + redirect_code: 301, + } as CategoryTree, +]; + +export const useTraverseCategoryMock = (categoryAncestors : CategoryTree[] = [], extend : any[] = []) => ({ + loadCategoryTree: jest.fn(), + isCategoryTreeLoaded: ref(true), + categoryAncestors: ref(categoryAncestors), + ...extend, +}); diff --git a/tests/unit/mocks/useUiHelpersMock.ts b/tests/unit/mocks/useUiHelpersMock.ts new file mode 100644 index 0000000..0b880a8 --- /dev/null +++ b/tests/unit/mocks/useUiHelpersMock.ts @@ -0,0 +1,9 @@ +export const useUiHelpersMock = (extend = {}) => ({ + changeSorting: jest.fn(), + clearFilters: jest.fn(), + getCatLink: jest.fn((val) => val), + getFacetsFromURL: jest.fn(() => ({ filters: {} })), + ...extend, +}); + +export default useUiHelpersMock; diff --git a/tests/unit/mocks/useUiState.ts b/tests/unit/mocks/useUiState.ts new file mode 100644 index 0000000..3547cda --- /dev/null +++ b/tests/unit/mocks/useUiState.ts @@ -0,0 +1,15 @@ +import { computed } from '@nuxtjs/composition-api'; + +export const useUiStateMock = (extend = {}) => ({ + isCartSidebarOpen: computed(() => false), + isMobileMenuOpen: computed(() => false), + changeToCategoryGridView: jest.fn(), + changeToCategoryListView: jest.fn(), + toggleCartSidebar: jest.fn(), + toggleFilterSidebar: jest.fn(), + toggleWishlistSidebar: jest.fn(), + toggleMobileMenu: jest.fn(), + ...extend, +}); + +export default useUiStateMock; diff --git a/tests/unit/mocks/useUser.js b/tests/unit/mocks/useUser.js new file mode 100644 index 0000000..87c9b6c --- /dev/null +++ b/tests/unit/mocks/useUser.js @@ -0,0 +1,13 @@ +import { ref } from '@nuxtjs/composition-api'; + +export const useUserMock = (userData = {}) => ({ + load: jest.fn(), + loading: ref(false), + isAuthenticated: ref(false), + error: ref({ + register: null, + }), + ...userData, +}); + +export default useUserMock; diff --git a/tests/unit/mocks/useUserBilling.js b/tests/unit/mocks/useUserBilling.js new file mode 100644 index 0000000..dbbe45e --- /dev/null +++ b/tests/unit/mocks/useUserBilling.js @@ -0,0 +1,14 @@ +export const useUserBillingMock = (userBillingData = {}) => ({ + load: jest.fn(), + loading: { + value: false, + }, + error: { + value: { + register: null, + }, + }, + ...userBillingData, +}); + +export default useUserBillingMock; diff --git a/tests/unit/test-utils.js b/tests/unit/test-utils.js new file mode 100644 index 0000000..fdc2d02 --- /dev/null +++ b/tests/unit/test-utils.js @@ -0,0 +1,47 @@ +import { render } from '@testing-library/vue'; +import deepmerge from 'deepmerge'; + +const $t = (text) => text; +const $n = (text) => text; +const $fc = (text) => text; +const $dompurify = (text) => text; +const localePath = (path) => path; +// eslint-disable-next-line @typescript-eslint/no-unsafe-argument +const customRender = (component, options = {}, callback = null) => render(component, deepmerge({ + mocks: { + $t, + $n, + $fc, + $dompurify, + localePath, + $i18n: { + t: jest.fn((value) => value), + }, + $nuxt: { + context: { + app: { + localePath, + $cookies: { + get: jest.fn(), + }, + }, + }, + }, + }, + stubs: { + NuxtImg: { + template: 'image', + }, + recaptcha: { + template: '
', + }, + i18n: { + template: '
', + }, + }, +// eslint-disable-next-line @typescript-eslint/no-unsafe-argument +}, options), callback); + +export * from '@testing-library/vue'; +export * from '~/tests/unit/mocks'; +export { customRender as render }; diff --git a/tsconfig.json b/tsconfig.json index be1cf9c..039b41f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,19 @@ { "compilerOptions": { + "jsx": "preserve", "declaration": true, - "target": "ES2018", - "module": "ESNext", - "moduleResolution": "Node", + "target": "ES2019", + "module": "ES2020", + "moduleResolution": "node", "lib": [ - "ESNext", - "ESNext.AsyncIterable", + "ES2019", "DOM" ], "esModuleInterop": true, "allowJs": true, "sourceMap": true, "strict": false, + "noImplicitThis": true, "noEmit": true, "baseUrl": ".", "paths": { @@ -24,17 +25,23 @@ ] }, "types": [ - "@types/node", + "node", + "@pinia/nuxt", "@nuxt/types", - "nuxt-i18n" + "cookie-universal-nuxt", + "nuxt-i18n", + "@nuxt/image", + "jest" ], + "typeRoots": ["../../node_modules/@types", "./node_modules/@types"], "resolveJsonModule": true, "rootDir": "./", "declarationDir": "./lib", "importHelpers": true, "allowSyntheticDefaultImports": true }, - "exclude": [ - "node_modules" - ] + "vueCompilerOptions": { + "target": 2 + }, + "exclude": ["tests/e2e/**"] } diff --git a/types/componentTemplateRef.ts b/types/componentTemplateRef.ts new file mode 100644 index 0000000..9a6158a --- /dev/null +++ b/types/componentTemplateRef.ts @@ -0,0 +1,13 @@ +import type { ComponentInstance } from '@nuxtjs/composition-api'; + +/** + * Template refs can also be applied to components, not only HTML elements, + * so this type uses Vue's ComponentInstance interface rather than HTMLElement. + * + * ComponentInstance["$el"] is `Element` by default. Element doesn't have `.focus()``, + * which would cause TypeScript errors if you use `myTemplateRef.$el.focus()`. + * For that reason, it's extended to the more specific `HTMLElement`` here + * + * * @template TElement The root element of the component. Can be used to pass a more specific element, like HTMLInputElement + */ +export type ComponentTemplateRef = ComponentInstance & { $el: TElement }; diff --git a/types/core.ts b/types/core.ts new file mode 100644 index 0000000..d55ff17 --- /dev/null +++ b/types/core.ts @@ -0,0 +1,21 @@ +import { useContext } from '@nuxtjs/composition-api'; + +export type UseContextReturn = ReturnType; + +export type CustomQuery = Record; + +export type CustomHeaders = Record; + +export type ApiClientMethods = { + [K in keyof T]: + T[K] extends (...args: any) => any ? + (...args: [...Parameters, CustomQuery?]) => ReturnType : + T[K] +}; + +export interface IntegrationContext { + client: CLIENT; + config: CONFIG; + api: API; + [x: string]: any; +} diff --git a/types/packages.d.ts b/types/packages.d.ts new file mode 100644 index 0000000..1958d0f --- /dev/null +++ b/types/packages.d.ts @@ -0,0 +1,8 @@ +// SFUI doesn't ship types and no @types package available +declare module '@storefront-ui/vue'; + +// omit-deep doesn't ship types and no @types package available +declare module 'omit-deep'; + +// https://github.com/maoberlehner/vue-lazy-hydration/pull/28 +declare module 'vue-lazy-hydration'; diff --git a/types/shims-vue.d.ts b/types/shims-vue.d.ts new file mode 100644 index 0000000..22c5174 --- /dev/null +++ b/types/shims-vue.d.ts @@ -0,0 +1,6 @@ +declare module '*.vue' { + import Vue from 'vue'; + + // eslint-disable-next-line unicorn/prefer-export-from + export default Vue; +} diff --git a/types/vueTestingLibrary.ts b/types/vueTestingLibrary.ts new file mode 100644 index 0000000..b7598c2 --- /dev/null +++ b/types/vueTestingLibrary.ts @@ -0,0 +1,3 @@ +import type { ComponentInstance } from '@nuxtjs/composition-api'; + +export type HTMLElementWithVue = HTMLElement & { __vue__: ComponentInstance }; diff --git a/yarn.lock b/yarn.lock index 1d3249c..49482ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,430 +2,456 @@ # yarn lockfile v1 -"@apollo/client@^3.4.16": - version "3.4.16" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.4.16.tgz#67090d5655aa843fa64d26f1913315e384a5fa0f" - integrity sha512-iF4zEYwvebkri0BZQyv8zfavPfVEafsK0wkOofa6eC2yZu50J18uTutKtC174rjHZ2eyxZ8tV7NvAPKRT+OtZw== +"@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.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@antfu/utils@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.3.0.tgz#6306c43b52a883bd8e973e3ed8dd64248418bcc4" + integrity sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA== + dependencies: + "@types/throttle-debounce" "^2.1.0" + +"@apollo/client@^3.6.9": + version "3.6.9" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.6.9.tgz#ad0ee2e3a3c92dbed4acd6917b6158a492739d94" + integrity sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA== dependencies: - "@graphql-typed-document-node/core" "^3.0.0" + "@graphql-typed-document-node/core" "^3.1.1" "@wry/context" "^0.6.0" "@wry/equality" "^0.5.0" "@wry/trie" "^0.3.0" - graphql-tag "^2.12.3" + graphql-tag "^2.12.6" hoist-non-react-statics "^3.3.2" optimism "^0.16.1" prop-types "^15.7.2" symbol-observable "^4.0.0" - ts-invariant "^0.9.0" + ts-invariant "^0.10.3" tslib "^2.3.0" - zen-observable-ts "~1.1.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.8.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.0", "@babel/compat-data@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" - integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" - integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helpers" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.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.18.6", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.14.0", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.16.0", "@babel/core@^7.18.6", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" + json5 "^2.2.1" semver "^6.3.0" - source-map "^0.5.0" -"@babel/generator@^7.16.0", "@babel/generator@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== +"@babel/generator@^7.16.0", "@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" - integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== +"@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.16.0" + "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" - integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== +"@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.16.0" - "@babel/types" "^7.16.0" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz#01d615762e796c17952c29e3ede9d6de07d235a8" - integrity sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg== +"@babel/helper-compilation-targets@^7.13.16", "@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.16.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" - integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - -"@babel/helper-create-regexp-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" - integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz#8867aed79d3ea6cade40f801efb7ac5c66916b10" - integrity sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" - integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== dependencies: - "@babel/types" "^7.16.0" + "@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-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== +"@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-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== - dependencies: - "@babel/types" "^7.16.0" - -"@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-module-transforms@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" - integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== - dependencies: - "@babel/types" "^7.16.0" - -"@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.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz#d5aa3b086e13a5fe05238ff40c3a5a0c2dab3ead" - integrity sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-wrap-function" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-replace-supers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" - integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" - integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== - dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helpers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.0.tgz#875519c979c232f41adfbd43a3b0398c2e388183" - integrity sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ== +"@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/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@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/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== +"@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.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/helper-validator-identifier" "^7.15.7" + "@babel/types" "^7.18.6" + +"@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.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@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.13.12", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@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.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.9" + "@babel/types" "^7.18.9" + +"@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.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + 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.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.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.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@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.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + 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.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@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.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.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.14.9", "@babel/parser@^7.16.0", "@babel/parser@^7.7.2", "@babel/parser@^7.9.6": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" - integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.14.9", "@babel/parser@^7.15.0", "@babel/parser@^7.16.3", "@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11", "@babel/parser@^7.18.4", "@babel/parser@^7.9.6": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.0": - version "7.16.2" - 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.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" - integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" - integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== +"@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.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz#11425d47a60364352f668ad5fbc1d6596b2c5caf" - integrity sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw== +"@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-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.0" + "@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.13.0", "@babel/plugin-proposal-class-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" - integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== +"@babel/plugin-proposal-class-properties@^7.13.0", "@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" - integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.0.tgz#515db5f6891611c0d176b63ede0844fbd9be797b" - integrity sha512-ttvhKuVnQwoNQrcTd1oe6o49ahaZ1kns1fsJKzTVOaS/FJDJoK4qzgVS68xzJhYUMgTnbXW6z/T6rlP3lL7tJw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators" "^7.16.0" - -"@babel/plugin-proposal-dynamic-import@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" - integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz#788650d01e518a8a722eb8b3055dd9d73ecb7a35" + integrity sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.18.6" + +"@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" - integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" - integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" - integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== +"@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.14.5" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" - integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" - integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" - integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== +"@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.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.16.0" + "@babel/plugin-transform-parameters" "^7.18.8" -"@babel/plugin-proposal-optional-catch-binding@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" - integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== +"@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.14.5" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" - integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@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.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" - integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== +"@babel/plugin-proposal-private-methods@^7.13.0", "@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" - integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== +"@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.16.0" - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" - integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + 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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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" @@ -455,12 +481,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" - integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== +"@babel/plugin-syntax-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz#2e45af22835d0b0f8665da2bfd4463649ce5dbc1" + integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -476,6 +502,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@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" @@ -490,12 +523,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.16.0", "@babel/plugin-syntax-jsx@^7.2.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" - integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.2.0": + 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.14.5" + "@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" @@ -554,336 +587,341 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" - integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" - integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-async-to-generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" - integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.0" - -"@babel/plugin-transform-block-scoped-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" - integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoping@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" - integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-classes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" - integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@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.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.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.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.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.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" - integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" - integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" - integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + 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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" - integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" - integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" - integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" - integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== +"@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-function-name" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" - integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" - integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" - integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@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.16.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" - integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.16.0" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" - integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== +"@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.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.15.7" + "@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.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" - integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" - integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== +"@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.16.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-new-target@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" - integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" - integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== +"@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.14.5" - "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz#1b50765fc421c229819dc4c7cdb8911660b3c2d7" - integrity sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" - integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-display-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676" - integrity sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg== +"@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/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef" - integrity sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw== +"@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.16.0" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1" - integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw== +"@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.0" - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.16.0" - "@babel/types" "^7.16.0" + "@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.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab" - integrity sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" - integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== +"@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: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" - integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.13.15", "@babel/plugin-transform-runtime@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.0.tgz#3fe0da36c2f0834bef7c4d3e7f2b2db0ee0c8909" - integrity sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.3" - babel-plugin-polyfill-corejs3 "^0.3.0" - babel-plugin-polyfill-regenerator "^0.2.3" + 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.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" - integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" - integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== +"@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.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-sticky-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" - integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" - integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" - integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" - integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== +"@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.14.5" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" - integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== +"@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.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.14.1", "@babel/preset-env@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.0.tgz#97228393d217560d6a1c6c56f0adb9d12bca67f5" - integrity sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg== - dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-async-generator-functions" "^7.16.0" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-class-static-block" "^7.16.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.0" - "@babel/plugin-proposal-export-namespace-from" "^7.16.0" - "@babel/plugin-proposal-json-strings" "^7.16.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-object-rest-spread" "^7.16.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-proposal-private-property-in-object" "^7.16.0" - "@babel/plugin-proposal-unicode-property-regex" "^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" @@ -893,44 +931,44 @@ "@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.16.0" - "@babel/plugin-transform-async-to-generator" "^7.16.0" - "@babel/plugin-transform-block-scoped-functions" "^7.16.0" - "@babel/plugin-transform-block-scoping" "^7.16.0" - "@babel/plugin-transform-classes" "^7.16.0" - "@babel/plugin-transform-computed-properties" "^7.16.0" - "@babel/plugin-transform-destructuring" "^7.16.0" - "@babel/plugin-transform-dotall-regex" "^7.16.0" - "@babel/plugin-transform-duplicate-keys" "^7.16.0" - "@babel/plugin-transform-exponentiation-operator" "^7.16.0" - "@babel/plugin-transform-for-of" "^7.16.0" - "@babel/plugin-transform-function-name" "^7.16.0" - "@babel/plugin-transform-literals" "^7.16.0" - "@babel/plugin-transform-member-expression-literals" "^7.16.0" - "@babel/plugin-transform-modules-amd" "^7.16.0" - "@babel/plugin-transform-modules-commonjs" "^7.16.0" - "@babel/plugin-transform-modules-systemjs" "^7.16.0" - "@babel/plugin-transform-modules-umd" "^7.16.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" - "@babel/plugin-transform-new-target" "^7.16.0" - "@babel/plugin-transform-object-super" "^7.16.0" - "@babel/plugin-transform-parameters" "^7.16.0" - "@babel/plugin-transform-property-literals" "^7.16.0" - "@babel/plugin-transform-regenerator" "^7.16.0" - "@babel/plugin-transform-reserved-words" "^7.16.0" - "@babel/plugin-transform-shorthand-properties" "^7.16.0" - "@babel/plugin-transform-spread" "^7.16.0" - "@babel/plugin-transform-sticky-regex" "^7.16.0" - "@babel/plugin-transform-template-literals" "^7.16.0" - "@babel/plugin-transform-typeof-symbol" "^7.16.0" - "@babel/plugin-transform-unicode-escapes" "^7.16.0" - "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@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.16.0" - babel-plugin-polyfill-corejs2 "^0.2.3" - babel-plugin-polyfill-corejs3 "^0.3.0" - babel-plugin-polyfill-regenerator "^0.2.3" - core-js-compat "^3.19.0" + "@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": @@ -945,54 +983,64 @@ esutils "^2.0.2" "@babel/preset-react@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a" - integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-react-display-name" "^7.16.0" - "@babel/plugin-transform-react-jsx" "^7.16.0" - "@babel/plugin-transform-react-jsx-development" "^7.16.0" - "@babel/plugin-transform-react-pure-annotations" "^7.16.0" - -"@babel/runtime@^7.14.0", "@babel/runtime@^7.16.0", "@babel/runtime@^7.8.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.0.tgz#e27b977f2e2088ba24748bf99b5e1dece64e4f0b" - integrity sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw== - dependencies: + 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.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.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/template@^7.16.0", "@babel/template@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.16.0", "@babel/runtime@^7.8.4", "@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: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" + regenerator-runtime "^0.13.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.9", "@babel/traverse@^7.16.0", "@babel/traverse@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" - integrity sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + 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.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.14.9", "@babel/traverse@^7.16.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@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.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1000,13 +1048,36 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@beyonk/google-fonts-webpack-plugin@^1.7": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@beyonk/google-fonts-webpack-plugin/-/google-fonts-webpack-plugin-1.7.0.tgz#a1d3c141dded874ea453b186f11f2c65c71dcd30" + integrity sha512-qQ4eLEJuTOVcq6SScUhaGn6WONwNHo69Dx3BVgKGRF4NfiOf6Xgzwu1G++wmsGvvsD/Lkx2PLCL46bVi7zE98A== + dependencies: + lodash "^4.17.4" + md5 "^2.2.1" + node-fetch "^2.1.2" + webpack-sources "^1.1.0" + yauzl "^2.8.0" + "@cld-apis/utils@^0.1.0": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@cld-apis/utils/-/utils-0.1.3.tgz#a12d26bef6955d4c3e501fb84ad4bf544f07aa10" - integrity sha512-e50vj4qE6PLYrado/ypwH+AVHwMRCevvpAz8sqDhRMow9MPiWNTuY9+jnLU8K/ewmX7rgdBsxxqBpMtF/OwhIw== + version "0.1.5" + resolved "https://registry.yarnpkg.com/@cld-apis/utils/-/utils-0.1.5.tgz#ff4d1a1466f3304a806d52f0a20dd97511970b20" + integrity sha512-9euD6sgxb2ly5OwTlDLptwxR0Apg7wylfsP+WsW9Dxm3e5AgMyhXzaf7mtPiva9KcT7lrWOxzJnN2s2c6NKp2A== 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== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -1036,10 +1107,10 @@ through2 "^2.0.0" watchify "^4.0.0" -"@cypress/request@^2.88.6": - version "2.88.6" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.6.tgz#a970dd675befc6bdf8a8921576c01f51cc5798e9" - integrity sha512-z0UxBE/+qaESAHY9p9sM2h8Y4XqtsbDCt0/DPOrqA/RZgKi4PkxdpXyK4wCCnSk1xHqWHZZAE+gV6aDAR6+caQ== +"@cypress/request@^2.88.10": + version "2.88.10" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" + integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -1048,8 +1119,7 @@ extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" + http-signature "~1.3.6" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" @@ -1077,25 +1147,25 @@ postcss "7.0.32" purgecss "^2.3.0" -"@gar/promisify@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" - integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@glidejs/glide@^3.3.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@glidejs/glide/-/glide-3.4.1.tgz#8ad21f3169076e32bbfd75ed0753807662c25e90" - integrity sha512-C34AEcK1HjSyxilRToUL54I6KAoodojUbeRlXoruobZuG0eGm8xfDL+3kgkWj7AJK4EZtunSOYfoqMp70eDtwg== + version "3.5.2" + resolved "https://registry.yarnpkg.com/@glidejs/glide/-/glide-3.5.2.tgz#7012c5920ecf202bbda44d8526fc979984b6dd54" + integrity sha512-7jGciNJ2bQ4eZLSNlSZ+VAyW63kALf420CvkEpK4lEsUfWJq9odqimci0YCiyNyMUFB+pWHwLYyNc57dijYsCg== -"@graphql-typed-document-node/core@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" - integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg== +"@graphql-typed-document-node/core@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" + integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== "@intlify/shared@^9.0.0": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a" - integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw== + version "9.2.2" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5" + integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== "@intlify/vue-i18n-extensions@^1.0.2": version "1.0.2" @@ -1129,184 +1199,213 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.3.1.tgz#e8ea3a475d3f8162f23d69efbfaa9cbe486bee93" - integrity sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.3.1" - jest-util "^27.3.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" -"@jest/core@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.3.1.tgz#04992ef1b58b17c459afb87ab56d81e63d386925" - integrity sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg== +"@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/console" "^27.3.1" - "@jest/reporters" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^27.3.0" - jest-config "^27.3.1" - jest-haste-map "^27.3.1" - jest-message-util "^27.3.1" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-resolve-dependencies "^27.3.1" - jest-runner "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" - jest-watcher "^27.3.1" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.3.1.tgz#2182defbce8d385fd51c5e7c7050f510bd4c86b1" - integrity sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.3.0" - -"@jest/fake-timers@^25.1.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== - dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" + jest-mock "^27.5.1" -"@jest/fake-timers@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.3.1.tgz#1fad860ee9b13034762cdb94266e95609dfce641" - integrity sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA== +"@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" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.3.1" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/globals@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.3.1.tgz#ce1dfb03d379237a9da6c1b99ecfaca1922a5f9e" - integrity sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@jest/environment" "^27.3.1" - "@jest/types" "^27.2.5" - expect "^27.3.1" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.3.1.tgz#28b5c1f5789481e23788048fa822ed15486430b9" - integrity sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^27.3.1" - jest-resolve "^27.3.1" - jest-util "^27.3.1" - jest-worker "^27.3.1" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/source-map@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" - integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== +"@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.24.1" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.3.1.tgz#89adee8b771877c69b3b8d59f52f29dccc300194" - integrity sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz#4b3bde2dbb05ee74afdae608cf0768e3354683b1" - integrity sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA== +"@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/test-result" "^27.3.1" - graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" - jest-runtime "^27.3.1" + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" -"@jest/transform@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.3.1.tgz#ff80eafbeabe811e9025e4b6f452126718455220" - integrity sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.2.5" - babel-plugin-istanbul "^6.0.0" + "@jest/types" "^27.5.1" + 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.4" - jest-haste-map "^27.3.1" - jest-regex-util "^27.0.6" - jest-util "^27.3.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" micromatch "^4.0.4" - pirates "^4.0.1" + pirates "^4.0.4" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@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: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" + "@babel/core" "^7.11.6" + "@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.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" "@jest/types@^26.6.2": version "26.6.2" @@ -1319,10 +1418,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.2.5": - version "27.2.5" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132" - integrity sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1330,10 +1429,73 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@juggle/resize-observer@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0" - integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw== +"@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.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + 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" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1357,28 +1519,37 @@ fastq "^1.6.0" "@npmcli/fs@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" - integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/git@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" - integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== +"@npmcli/fs@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" + integrity sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg== dependencies: - "@npmcli/promise-spawn" "^1.3.2" - lru-cache "^6.0.0" + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" + integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" mkdirp "^1.0.4" - npm-pick-manifest "^6.1.1" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" which "^2.0.2" -"@npmcli/installed-package-contents@^1.0.6": +"@npmcli/installed-package-contents@^1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== @@ -1394,27 +1565,36 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/node-gyp@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" - integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== +"@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== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" -"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@^1.8.2": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" - integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== +"@npmcli/run-script@^4.1.0": + 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" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^7.1.0" - read-package-json-fast "^2.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" "@nuxt/babel-preset-app@2.15.8": version "2.15.8" @@ -1564,6 +1744,28 @@ node-html-parser "^3.2.0" ufo "^0.7.4" +"@nuxt/image@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@nuxt/image/-/image-0.7.1.tgz#3d64f76785c3ecd8983202d814cc5ed5c6dfb96f" + integrity sha512-dKCVvRBae9rPHvyaIcC1ypFh+rnNP85WJgzYOE7XMtHQnrGj7X8UiGWTlk2ahcRPBGx1W8JlJuNGBhWZKrf6lQ== + dependencies: + consola "^2.15.3" + defu "^6.0.0" + fs-extra "^10.1.0" + hasha "^5.2.2" + image-meta "^0.1.1" + is-https "^4.0.0" + lru-cache "^7.10.1" + node-fetch-native "^0.1.4" + p-limit "^3.1.0" + rc9 "^1.2.2" + requrl "^3.0.2" + semver "^7.3.7" + ufo "^0.8.4" + upath "^2.0.1" + optionalDependencies: + ipx "^0.9.9" + "@nuxt/loading-screen@^2.0.3": version "2.0.4" resolved "https://registry.yarnpkg.com/@nuxt/loading-screen/-/loading-screen-2.0.4.tgz#756abd861f77c57001be4d21d47534723afb4f3a" @@ -1576,13 +1778,13 @@ serve-static "^1.14.1" "@nuxt/opencollective@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.2.tgz#83cb70cdb2bac5fad6f8c93529e7b11187d49c02" - integrity sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.3.tgz#80ff0eb8f6fca1d0ed5a089b9688f41bff2dd8ab" + integrity sha512-6IKCd+gP0HliixqZT/p8nW3tucD6Sv/u/eR2A9X4rxT/6hXlMzA4GZQzq4d2qnBAwSwGpmKyzkyTjNjrhaA25A== dependencies: chalk "^4.1.0" consola "^2.15.0" - node-fetch "^2.6.1" + node-fetch "^2.6.7" "@nuxt/server@2.15.8": version "2.15.8" @@ -1656,7 +1858,7 @@ "@types/webpack-hot-middleware" "2.25.4" sass-loader "10.1.1" -"@nuxt/typescript-build@^2.0.0", "@nuxt/typescript-build@latest": +"@nuxt/typescript-build@^2.0.0", "@nuxt/typescript-build@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@nuxt/typescript-build/-/typescript-build-2.1.0.tgz#191fe60e942ce84a01468ba6e255744e01c7c538" integrity sha512-7TLMpfzgOckf3cBkzoPFns6Xl8FzY6MoFfm/5HUE47QeTWAdOG9ZFxMrVhHWieZHYUuV+k6byRtaRv4S/3R8zA== @@ -1768,22 +1970,40 @@ webpack-node-externals "^3.0.0" webpackbar "^4.0.0" -"@nuxtjs/composition-api@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.17.0.tgz#533402f82dc860cbed17d9612ac8b41333789b26" - integrity sha512-hc/1amRpu1sr4/0jkb4T0N37YgvM00jcBTQeur5ymdUd52eJExKiOu+EwbWvTPRFz8IU29x6PhdLZ5LcJT6FgA== +"@nuxtjs/composition-api@^0.29.3": + version "0.29.3" + resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.29.3.tgz#04ea6d4757ed0217fd45250913b70830d55f5b6b" + integrity sha512-zHI807v8yrvxU8Cq/ISa7AYDRdBE5ajnuuSXEDrvFBX1KJh9ShxCeknZHzXrrnFKAXnIMcouMQnbgVtk5StTzw== dependencies: - "@vue/composition-api" "1.0.0-beta.21" - defu "^3.2.2" - normalize-path "^3.0.0" + "@vue/composition-api" "^1.2.4" + defu "^5.0.0" + estree-walker "^2.0.2" + fs-extra "^9.1.0" + magic-string "^0.25.7" + ufo "^0.7.9" + unplugin-vue2-script-setup "^0.6.11" + upath "^2.0.1" -"@nuxtjs/google-fonts@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@nuxtjs/google-fonts/-/google-fonts-1.3.0.tgz#36cefee4aef4f8b772180c7ed7cc902f02f585c4" - integrity sha512-xIleOl4nASOzFpJ/+g08ENlYZPdxqGEw6Yx7catNEKft5ZtFtTX8RUTj7y7ctQKpUgJgvujVL/phnP1lMtHg2A== +"@nuxtjs/composition-api@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.31.0.tgz#4baa645ee45e306a49b72de6257fdb9438eb2b07" + integrity sha512-xplH/EJ17W/EjNP7M11URTOrQcjMYqQn1wXUkMOdMiSLKM58VWuCyt0uT9jNCHMUspeQ+SPzr9dxQkNBGvwfiA== dependencies: - consola "^2.15.3" - google-fonts-helper "^1.2.0" + "@vue/composition-api" "^1.4.1" + defu "^5.0.0" + estree-walker "^2.0.2" + fs-extra "^9.1.0" + magic-string "^0.25.7" + ufo "^0.7.9" + unplugin-vue2-script-setup "^0.7.3" + upath "^2.0.1" + +"@nuxtjs/device@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nuxtjs/device/-/device-2.1.0.tgz#552c668b2d82dc982d18429845777c19d48d87d6" + integrity sha512-TYBdt1w2bmCCWp+MhgcBATZtqyUBi3nSdNpcLGILw5USLwCsC/yZtIkq9YisuEzuRnod9w/RZpoE80MxLftEuA== + dependencies: + defu "^3.2.2" "@nuxtjs/pwa@^3.3.5": version "3.3.5" @@ -1800,6 +2020,11 @@ serve-static "^1.14.1" workbox-cdn "^5.1.4" +"@nuxtjs/recaptcha@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nuxtjs/recaptcha/-/recaptcha-1.1.1.tgz#21f9dcd53d7b869b570ab4829404df1200ed26de" + integrity sha512-maHqf6x6EgfRm7lvjK7nTwle/17cRzMkeFDWPGdcdKjDnAjuli7Mei5qPG0CFZX1zG9ohIEv+0QEs7fgudyLrg== + "@nuxtjs/style-resources@^1.0.0", "@nuxtjs/style-resources@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@nuxtjs/style-resources/-/style-resources-1.2.1.tgz#9a2b6580b2ed9b06e930bee488a56b8376a263de" @@ -1848,6 +2073,20 @@ "@opencensus/core" "^0.0.8" uuid "^3.2.1" +"@pinia/nuxt@^0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@pinia/nuxt/-/nuxt-0.1.9.tgz#96bd971ff5e280d401d1b2be1510b6ae4600a510" + integrity sha512-5YmfBOxXHM5eA5pE4mq5opJnSmVYn2qYJ2ak01FrCww0esxfRLkmuu4emynu0Ar5eQ/DDz9wI3ukgRwAubXqmg== + dependencies: + vue-demi "*" + +"@pinia/testing@^0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@pinia/testing/-/testing-0.0.12.tgz#1692568b4b55347429556ab43e354e81519f73e0" + integrity sha512-OGJ5kZihiuNua9trREAVLiv8wAlxT2+gZAz3Cen1L4ch51MbSgY5/nbo9htYsP2my9dhbggBhecgYWlhejhRcQ== + dependencies: + vue-demi "*" + "@pm2/agent@~2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-2.0.1.tgz#0edffc54cd8ee2b12f90136264e7880f3f78c79d" @@ -1901,20 +2140,43 @@ dependencies: debug "^4.3.1" +"@pnpm/network.ca-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz#16f88d057c68cd5419c1ef3dfa281296ea80b047" + integrity sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^1.0.4": + 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" + "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@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== +"@rollup/pluginutils@^4.1.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" -"@sindresorhus/is@^4.0.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" - integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== +"@sinclair/typebox@^0.24.1": + version "0.24.27" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.27.tgz#d55643516a1546174e10da681a8aaa81e757452d" + integrity sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg== + +"@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" @@ -1930,50 +2192,109 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@storefront-ui/shared@0.11.1": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@storefront-ui/shared/-/shared-0.11.1.tgz#6e1c88282b665b014e8b737a3a7d5229ec21b2c6" - integrity sha512-hQr93XEzrezQJV0QHoiZAC69j39KdxpoYRVE3dlDOpon1ujNqqw3JbW8UvpWnxlz+lIchGKbj9G2tTsMRfctsw== +"@storefront-ui/shared@0.13.3": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@storefront-ui/shared/-/shared-0.13.3.tgz#2350d75649764dce90d8546af8ba18f2d7786ed2" + integrity sha512-lCfUEb5Cv7fvzNOKfFClwRj+ARTJukWDJyz6d8NIDzM0hEWImpNiy5Z32EFa0XZz22SFoMaUHhDyPSzhusTmag== -"@storefront-ui/vue@^0.11.0": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@storefront-ui/vue/-/vue-0.11.1.tgz#bc90dfaae9b1781de3ff53f65d6d90119f1aa785" - integrity sha512-hseauvS3lnrMZkV71ObthFw0JXC+eHFdtfrHGxwPhjT+sMo75T25oSxnpzmhswGkYTQk3cCJoAx+H593Koxbhw== +"@storefront-ui/vue@^0.13.3": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@storefront-ui/vue/-/vue-0.13.3.tgz#bd3219636c40cb4a5602e110cfb322e15ab03264" + integrity sha512-3iYiIL+760Atqt3v5iC2w8ger4QsUeATn/EQrWsID16ZAqC4bry8oph3aT7U3qsWDzZ+wIipSX7Opd3yRdpBOg== dependencies: "@glidejs/glide" "^3.3.0" - "@storefront-ui/shared" "0.11.1" + "@storefront-ui/shared" "0.13.3" body-scroll-lock "^3.0.1" cloudinary-build-url "^0.1.1" core-js "^3.6.5" glob "^7.1.4" - hammerjs "^2.0.8" leaflet "^1.5.1" nouislider "^15.2.0" sass "^1.32.13" sass-loader "^10.0.3" - simplebar-vue "^1.4.0" vue "^2.6.12" vue2-leaflet "^2.5.2" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - defer-to-connect "^1.0.1" + defer-to-connect "^2.0.1" + +"@testing-library/dom@^7.26.6": + version "7.31.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" + integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.6" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/jest-dom@^5.16.4": + 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.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== +"@testing-library/user-event@^14.2.1": + 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" + resolved "https://registry.yarnpkg.com/@testing-library/vue/-/vue-5.8.3.tgz#c56e9eac598bdf6f5e0309799c538e815ddc0b59" + integrity sha512-M6+QqP1xuFHixKOeXF9pCLbtiyJZRKfJRP+unBf6Ljm7aS1V2CSS95oTetFoblaj0W1+AC9XJgwmUDtlLoaakQ== dependencies: - defer-to-connect "^2.0.0" + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.26.6" + "@vue/test-utils" "^1.1.0" "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "@types/anymatch@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-3.0.0.tgz#c95ff14401dbb2869913afac3935af4ad0d37f1a" @@ -1981,6 +2302,11 @@ dependencies: anymatch "*" +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + "@types/autoprefixer@9.7.2": version "9.7.2" resolved "https://registry.yarnpkg.com/@types/autoprefixer/-/autoprefixer-9.7.2.tgz#64b3251c9675feef5a631b7dd34cfea50a8fdbcc" @@ -2001,9 +2327,9 @@ "@types/babel__traverse" "*" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.16" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" - integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2012,9 +2338,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" @@ -2027,16 +2353,16 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" + integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== dependencies: "@babel/types" "^7.3.0" "@types/body-parser@*": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" - integrity sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg== + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" "@types/node" "*" @@ -2048,7 +2374,7 @@ dependencies: browserslist "*" -"@types/cacheable-request@^6.0.1": +"@types/cacheable-request@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== @@ -2092,6 +2418,13 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== +"@types/dompurify@^2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.3.3.tgz#c24c92f698f77ed9cc9d9fa7888f90cf2bfaa23f" + integrity sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w== + dependencies: + "@types/trusted-types" "*" + "@types/etag@1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@types/etag/-/etag-1.8.0.tgz#37f0b1f3ea46da7ae319bbedb607e375b4c99f7e" @@ -2100,9 +2433,9 @@ "@types/node" "*" "@types/express-serve-static-core@^4.17.18": - version "4.17.24" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" - integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA== + 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" "*" @@ -2125,7 +2458,7 @@ dependencies: "@types/webpack" "^4" -"@types/graceful-fs@^4.1.2": +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== @@ -2152,9 +2485,9 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -2163,14 +2496,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" @@ -2178,15 +2503,28 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@*": + version "28.1.6" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" + integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== + dependencies: + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" + +"@types/json-buffer@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" + integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== + "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/keyv@*": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" - integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" @@ -2195,22 +2533,39 @@ resolved "https://registry.yarnpkg.com/@types/less/-/less-3.0.2.tgz#2761d477678c8374cb9897666871662eb1d1115e" integrity sha512-62vfe65cMSzYaWmpmhqCMMNl0khen89w57mByPi1OseGfcV/LV03fO8YVrNj7rFQsRWNJo650WWyh6m7p8vZmA== +"@types/lodash-es@^4.17.6": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + dependencies: + "@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== + +"@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" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== "@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" "*" -"@types/node@*", "@types/node@>=6": - version "16.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" - integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== +"@types/node@*": + version "18.7.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.2.tgz#22306626110c459aedd2cdf131c749ec781e3b34" + integrity sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA== "@types/node@12.20.12": version "12.20.12" @@ -2218,9 +2573,9 @@ integrity sha512-KQZ1al2hKOONAs2MFv+yTQP1LkDWMrRJ9YCVRalXltOfXsBmH5IownLxQaiq0lnAHwAViLnh2aTYqrPcRGEbgg== "@types/node@^14.14.31": - version "14.17.32" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.32.tgz#2ca61c9ef8c77f6fa1733be9e623ceb0d372ad96" - integrity sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ== + version "14.18.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.23.tgz#70f5f20b0b1b38f696848c1d3647bb95694e615e" + integrity sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA== "@types/optimize-css-assets-webpack-plugin@5.0.3": version "5.0.3" @@ -2235,14 +2590,14 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.1.5": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" - integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== + version "2.7.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== "@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" @@ -2281,18 +2636,18 @@ "@types/webpack" "^4" "@types/sass@*": - version "1.43.0" - resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.43.0.tgz#b4cebe057d887ed66dc6813fd6cbef22043057bb" - integrity sha512-DPSXNJ1rYLo88GyF9tuB4bsYGfpKI1a4+wOQmc+LI1SUoocm9QLRSpz0GxxuyjmJsYFIQo/dDlRSSpIXngff+w== + version "1.43.1" + resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.43.1.tgz#86bb0168e9e881d7dade6eba16c9ed6d25dc2f68" + integrity sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g== dependencies: "@types/node" "*" "@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": @@ -2303,10 +2658,10 @@ "@types/mime" "^1" "@types/node" "*" -"@types/sinonjs__fake-timers@^6.0.2": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz#0ecc1b9259b76598ef01942f547904ce61a6a77d" - integrity sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A== +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": version "2.3.3" @@ -2318,16 +2673,21 @@ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@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 sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + "@types/tapable@^1", "@types/tapable@^1.0.5": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" @@ -2341,10 +2701,27 @@ "@types/webpack" "^4" terser "^4.6.13" +"@types/testing-library__jest-dom@^5.9.1": + 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" "*" + +"@types/throttle-debounce@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" + integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== + +"@types/trusted-types@*": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" + integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== + "@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + version "3.16.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.16.0.tgz#2cf74a0e6ebb6cd54c0d48e509d5bd91160a9602" + integrity sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g== dependencies: source-map "^0.6.1" @@ -2393,9 +2770,9 @@ source-map "^0.6.0" "@types/webpack@^4", "@types/webpack@^4.41.8": - version "4.41.31" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz#c35f252a3559ddf9c85c0d8b0b42019025e581aa" - integrity sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ== + version "4.41.32" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" + integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -2405,9 +2782,9 @@ source-map "^0.6.0" "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^15.0.0": version "15.0.14" @@ -2423,99 +2800,92 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" + integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + dependencies: + "@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" "*" -"@types/zen-observable@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" - integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== -"@types/zen-observable@0.8.3", "@types/zen-observable@^0.8.0": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" - integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== +"@vue-storefront/cache@~2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/cache/-/cache-2.7.1.tgz#7e7db5daf8948e198f8f68c136577deca812ff02" + integrity sha512-AyTuuBlFo/PggrWE9xdjJtW4Oc5UgNWhpDQHJR7EZe8IBwzh9nr4pS+BjEJaCQ9e0CzzDl+OuUjoaFVUDErbnQ== + dependencies: + "@vue-storefront/core" "~2.7.1" -"@vue-storefront/core@~2.4.5": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@vue-storefront/core/-/core-2.4.5.tgz#1512d423ec6d2dd276698ed03a29303a8edd3ded" - integrity sha512-8bn7NkrXmgaG4cHMBMHryWIkp1ympkSwsDAg3r2/p5W7r+T7yeosKL1AbF35pvavFnNbEx4fYd1NPUibLOF4zA== +"@vue-storefront/core@~2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/core/-/core-2.7.1.tgz#ff9ae1577e42783d97bd365c6694ca9b44c76883" + integrity sha512-YXr3oPtfd0KXp32XHUNcPJIhOWiIOSOHLLNJceSSR3ouan9aM2JtJsj1VHcHyTD/6MopTgM65EXncmh5o6/VRw== dependencies: - "@vue/composition-api" "1.0.0-beta.21" axios "0.21.1" express "^4.17.1" - is-https "^3.0.2" lodash-es "^4.17.15" vue "^2.6.11" -"@vue-storefront/magento-api@1.0.0-rc.4.3": - version "1.0.0-rc.4.3" - resolved "https://registry.yarnpkg.com/@vue-storefront/magento-api/-/magento-api-1.0.0-rc.4.3.tgz#aeba5a70a3cc108bd6acd7cdbff9ba808c76e7f0" - integrity sha512-lCJWXyZx0wiZDfKKizE7DA3d++wi+hg56GZ6OSXfymb5McEv41q8LzHITd9xdT630LQq1kV04MoG3va0k0bmHw== - dependencies: - "@apollo/client" "^3.4.16" - "@vue-storefront/core" "~2.4.5" - apollo-cache-inmemory "^1.6.6" - apollo-client "^2.6.10" - apollo-link "^1.2.14" - apollo-link-context "^1.0.20" - apollo-link-error "^1.1.13" - apollo-link-http "^1.5.17" - apollo-link-retry "^2.2.16" - graphql "^15.6.1" - graphql-tag "^2.12.5" - isomorphic-fetch "^3.0.0" +"@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/magento@1.0.0-rc.4.3": - version "1.0.0-rc.4.3" - resolved "https://registry.yarnpkg.com/@vue-storefront/magento/-/magento-1.0.0-rc.4.3.tgz#a55b0975b9d51a9785bda567076572ee0ce77332" - integrity sha512-IwpkVAJrbOfCUXdhcPwK5DvlTZbbOKq7SvP+8ZCjXHTUJTMWky7uvcExE8wnJwPVKQUzMiFPTjPnCg9CcrB2Gg== - dependencies: - "@vue-storefront/core" "~2.4.5" - "@vue-storefront/magento-api" "1.0.0-rc.4.3" - cookie-universal "^2.1.5" - vue "^2.6.12" - vue-demi "0.11.4" +"@vue-storefront/magento-api@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@vue-storefront/magento-api/-/magento-api-1.1.0.tgz#5fa3937732b049b661575ef86684adbacbdde9d4" + integrity sha512-xOfs9K/LKbm6ipuDSssaYww8fMacZA2CoL58cX7lUhMz4shD+XQoenVtTeXbT8ZW+vX44pBkZR5BdPlAln7vLw== + dependencies: + "@apollo/client" "^3.6.9" + agentkeepalive "^4.2.1" + dotenv "^16.0.1" + graphql "^16.3.0" + graphql-tag "^2.12.6" + isomorphic-fetch "^3.0.0" -"@vue-storefront/middleware@~2.4.5": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@vue-storefront/middleware/-/middleware-2.4.5.tgz#00a8a8dd6a6a5726f3491551cfdf4d6238578bb9" - integrity sha512-rsR1p3Y3F0L+li+A5ejwF4i1cGvi9STx3CpPfBFwNtrm0q+4pgLu8MyL9dUG5bgJTGicyf5ri89gyvJM8IxS3w== +"@vue-storefront/middleware@~2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/middleware/-/middleware-2.7.1.tgz#f289adca30ab5665bed13df2b55a7de879b9ff70" + integrity sha512-SqY/ew+n4ewazOdcUYeZQbqMOwHUjBMkaB/vgUFjwIomoMgi8zo/+K+emycY3CcTF9XS6KsT3lO7H5+MIxdUBg== dependencies: + "@vue-storefront/core" "~2.7.1" consola "2.15.3" cookie-parser "^1.4.5" cors "^2.8.5" express "^4.17.1" + helmet "^5.0.2" -"@vue-storefront/nuxt-theme@~2.4.5": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@vue-storefront/nuxt-theme/-/nuxt-theme-2.4.5.tgz#2096ad71f7eaf6fe1e1414bac9d3baa39fa232bb" - integrity sha512-uXa+HKgKzudgJ6GuN/ekNme975WdGSouMFY4yIADFRulUVyIl1duKhW9T/72qfWg/x7nMLU3NJDAhrLE4AkFHA== - dependencies: - ejs "^3.0.2" - lodash.debounce "^4.0.8" - lodash.merge "^4.6.2" - vue-lazy-hydration "^2.0.0-beta.4" - -"@vue-storefront/nuxt@~2.4.5": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@vue-storefront/nuxt/-/nuxt-2.4.5.tgz#0efb4ce749251bc0109b960cc0024f49fe764161" - integrity sha512-Vekvt4RKLLAXNeajwLArZlml4XY3IQW0rvuHZiRrZ1235zVuZpwIkViduc0CUCjdySUCfDD10pG+fdU2Xz+3ug== +"@vue-storefront/nuxt@~2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/nuxt/-/nuxt-2.7.1.tgz#56c7f5ad6262052720b4afa4266bf01dfc48f2bd" + integrity sha512-jhG/F24tSTqEmK84WYzMciZ2kShbZduwdUO7iWOWxs1VpFBYkcKQybGjFdqXpkaCcftCYjFwaVZfUiv3hiYK6g== dependencies: "@nuxt/typescript-build" "^2.0.0" - "@nuxtjs/composition-api" "0.17.0" + "@nuxtjs/composition-api" "^0.29.3" "@nuxtjs/style-resources" "^1.0.0" - "@vue/composition-api" "1.0.0-beta.21" chalk "^2.4.2" chokidar "^3.3.1" consola "^2.10.1" lodash "^4.17.15" nuxt-purgecss "^1.0.0" +"@vue-storefront/redis-cache@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@vue-storefront/redis-cache/-/redis-cache-1.0.1.tgz#3e044b03a813ac4270b1fa1b6a39b4d2bcda3db1" + integrity sha512-+p+n4f1/dhXagjmQ3ec47JsA79KJ1O8ZjIC1/iac1CdruZINzSzlBUdgDY79+Ri2wRr6GwSpnR9qjnLX+Eu5Hw== + dependencies: + redis-tag-cache "^1.2.1" + "@vue/babel-helper-vue-jsx-merge-props@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" @@ -2534,30 +2904,30 @@ svg-tags "^1.0.0" "@vue/babel-preset-jsx@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87" - integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w== + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.3.1.tgz#10789417a17680d9855bd96fd9894d9b51fd979b" + integrity sha512-ml+nqcSKp8uAqFZLNc7OWLMzR7xDBsUfkomF98DtiIBlLqlq4jCQoLINARhgqRIyKdB+mk/94NWpIb4pL6D3xw== dependencies: "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" - "@vue/babel-sugar-composition-api-inject-h" "^1.2.1" - "@vue/babel-sugar-composition-api-render-instance" "^1.2.4" + "@vue/babel-sugar-composition-api-inject-h" "^1.3.0" + "@vue/babel-sugar-composition-api-render-instance" "^1.3.0" "@vue/babel-sugar-functional-vue" "^1.2.2" "@vue/babel-sugar-inject-h" "^1.2.2" - "@vue/babel-sugar-v-model" "^1.2.3" - "@vue/babel-sugar-v-on" "^1.2.3" + "@vue/babel-sugar-v-model" "^1.3.0" + "@vue/babel-sugar-v-on" "^1.3.0" -"@vue/babel-sugar-composition-api-inject-h@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb" - integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ== +"@vue/babel-sugar-composition-api-inject-h@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.3.0.tgz#1402f34cea217c7117fb66fdcbd94e1c370cd9c0" + integrity sha512-pIDOutEpqbURdVw7xhgxmuDW8Tl+lTgzJZC5jdlUu0lY2+izT9kz3Umd/Tbu0U5cpCJ2Yhu87BZFBzWpS0Xemg== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-composition-api-render-instance@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz#e4cbc6997c344fac271785ad7a29325c51d68d19" - integrity sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q== +"@vue/babel-sugar-composition-api-render-instance@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.3.0.tgz#3039d3d9eca09e56d41a56a03d73a146211c18a5" + integrity sha512-NYNnU2r7wkJLMV5p9Zj4pswmCs037O/N2+/Fs6SyX7aRFzXJRP1/2CZh5cIwQxWQajHXuCUd5mTb7DxoBVWyTg== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" @@ -2575,10 +2945,10 @@ dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-v-model@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2" - integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ== +"@vue/babel-sugar-v-model@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.3.0.tgz#e4da7ae27a74c473b1abba060260ecaa8cb6e46b" + integrity sha512-zcsabmdX48JmxTObn3xmrvvdbEy8oo63DphVyA3WRYGp4SEvJRpu/IvZCVPl/dXLuob2xO/QRuncqPgHvZPzpA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" @@ -2587,15 +2957,44 @@ html-tags "^2.0.0" svg-tags "^1.0.0" -"@vue/babel-sugar-v-on@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada" - integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw== +"@vue/babel-sugar-v-on@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.3.0.tgz#d35756f8720e527a3b1867e21c3c248cde47ca87" + integrity sha512-8VZgrS0G5bh7+Prj7oJkzg9GvhSPnuW5YT6MNaVAEy4uwxRLJ8GqHenaStfllChTao4XZ3EZkNtHB4Xbr/ePdA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" camelcase "^5.0.0" +"@vue/compiler-core@3.2.24": + version "3.2.24" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.24.tgz#cadcda0e026e7f1cd453ce87160be51a5f313fe0" + integrity sha512-A0SxB2HAggKzP57LDin5gfgWOTwFyGCtQ5MTMNBADnfQYALWnYuC8kMI0DhRSplGTWRvn9Z2DAnG8f35BnojuA== + dependencies: + "@babel/parser" "^7.15.0" + "@vue/shared" "3.2.24" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-core@^3.2.23": + version "3.2.37" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" + integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-sfc@2.7.8": + version "2.7.8" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.8.tgz#731aadd6beafdb9c72fd8614ce189ac6cee87612" + integrity sha512-2DK4YWKfgLnW9VDR9gnju1gcYRk3flKj8UNsms7fsRmFcg35slVTZEkqwBtX+wJBXaamFfn6NxSsZh3h12Ix/Q== + dependencies: + "@babel/parser" "^7.18.4" + postcss "^8.4.14" + source-map "^0.6.1" + "@vue/component-compiler-utils@^3.1.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" @@ -2612,17 +3011,65 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" -"@vue/composition-api@1.0.0-beta.21": - version "1.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.0.0-beta.21.tgz#d5a3c68afc8b569dfc3eccd69998388bb7f6a16c" - integrity sha512-tgbvDpLvKQ1GrII424wsoyzPCsG0oTFf38emMq495SfLY7RmUqhVIl81pvnC5489PPrCxDkbauJHJrhlcXfbTQ== - dependencies: - tslib "^2.0.1" +"@vue/composition-api@^1.2.4", "@vue/composition-api@^1.4.1": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.7.0.tgz#26fae79e5023fc6c9dfd99ca5d3d357e1c5b9c60" + integrity sha512-hxOgLYR+wjuPX9bkP2pAPlqUs98XxBoa9DSLyp1z6+YR92wC42PZcZKs4d+VRtcv4udOv041Kss+F6ap5nj8YA== -"@vue/test-utils@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.2.2.tgz#0242ea4e202d4853541bb167fead3f2249140ab7" - integrity sha512-P+yiAsszoy8z1TqXiVUnAZaJj0WGGz5fCxm4bOSI6Cpwy1+PNYwYxDv0ROAA/SUtOPppV+aD8tp/QWwxf8ROJw== +"@vue/devtools-api@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" + integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== + +"@vue/reactivity@3.2.37": + version "3.2.37" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848" + integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== + dependencies: + "@vue/shared" "3.2.37" + +"@vue/ref-transform@^3.2.21", "@vue/ref-transform@^3.2.23": + version "3.2.24" + resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.24.tgz#335bf06e0b25be16e7056cc4117c51a79f0c9122" + integrity sha512-j6oNbsGLvea2rF8GQB9w6q7UFL1So7J+t6ducaMeWPSyjYZ+slWpwPVK6mmyghg5oGqC41R+HC5BV036Y0KhXQ== + dependencies: + "@babel/parser" "^7.15.0" + "@vue/compiler-core" "3.2.24" + "@vue/shared" "3.2.24" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/runtime-core@3.2.37": + version "3.2.37" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3" + integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== + dependencies: + "@vue/reactivity" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/runtime-dom@^3.2.37": + version "3.2.37" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd" + integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw== + dependencies: + "@vue/runtime-core" "3.2.37" + "@vue/shared" "3.2.37" + csstype "^2.6.8" + +"@vue/shared@3.2.24": + version "3.2.24" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.24.tgz#d74615e856013b17fb60b19b09d712729ad5e090" + integrity sha512-BUgRiZCkCrqDps5aQ9av05xcge3rn092ztKIh17tHkeEFgP4zfXMQWBA2zfdoCdCEdBL26xtOv+FZYiOp9RUDA== + +"@vue/shared@3.2.37", "@vue/shared@^3.2.21", "@vue/shared@^3.2.23": + version "3.2.37" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702" + integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== + +"@vue/test-utils@^1.1.0", "@vue/test-utils@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15" + integrity sha512-Xk2Xiyj2k5dFb8eYUKkcN9PzqZSppTlx7LaQWBbdA8tqh3jHr/KHX2/YLhNFc/xwDrgeLybqd+4ZCPJSGPIqeA== dependencies: dom-event-types "^1.0.0" lodash "^4.17.15" @@ -2773,14 +3220,6 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" -"@wry/context@^0.4.0": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.4.4.tgz#e50f5fa1d6cfaabf2977d1fda5ae91717f8815f8" - integrity sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag== - dependencies: - "@types/node" ">=6" - tslib "^1.9.3" - "@wry/context@^0.6.0": version "0.6.1" resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.1.tgz#c3c29c0ad622adb00f6a53303c4f965ee06ebeb2" @@ -2788,13 +3227,6 @@ dependencies: tslib "^2.3.0" -"@wry/equality@^0.1.2": - version "0.1.11" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" - integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== - dependencies: - tslib "^1.9.3" - "@wry/equality@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73" @@ -2827,23 +3259,23 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: + version "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== -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" acorn-globals@^6.0.0: version "6.0.0" @@ -2853,7 +3285,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -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== @@ -2867,7 +3299,7 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0: +acorn-walk@^8.0.0, acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== @@ -2882,10 +3314,10 @@ acorn@^7.0.0, acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.4: - version "8.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" - integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== +acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" @@ -2894,10 +3326,10 @@ agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: dependencies: debug "4" -agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: debug "^4.1.0" depd "^1.1.2" @@ -2921,7 +3353,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2934,32 +3366,37 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== amp-message@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" - integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU= + integrity sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg== dependencies: amp "0.3.1" amp@0.3.1, amp@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" - integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= + integrity sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw== -ansi-align@^3.0.0: +ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" -ansi-colors@^4.1.1: +ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2975,14 +3412,9 @@ ansi-html-community@0.0.8: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^5.0.1: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2995,9 +3427,9 @@ ansi-regex@^6.0.1: ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -3016,6 +3448,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + anymatch@*, anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.0, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -3032,104 +3469,12 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -apollo-cache-inmemory@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz#56d1f2a463a6b9db32e9fa990af16d2a008206fd" - integrity sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A== - dependencies: - apollo-cache "^1.3.5" - apollo-utilities "^1.3.4" - optimism "^0.10.0" - ts-invariant "^0.4.0" - tslib "^1.10.0" - -apollo-cache@1.3.5, apollo-cache@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.5.tgz#9dbebfc8dbe8fe7f97ba568a224bca2c5d81f461" - integrity sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA== - dependencies: - apollo-utilities "^1.3.4" - tslib "^1.10.0" - -apollo-client@^2.6.10: - version "2.6.10" - resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.10.tgz#86637047b51d940c8eaa771a4ce1b02df16bea6a" - integrity sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA== - dependencies: - "@types/zen-observable" "^0.8.0" - apollo-cache "1.3.5" - apollo-link "^1.0.0" - apollo-utilities "1.3.4" - symbol-observable "^1.0.2" - ts-invariant "^0.4.0" - tslib "^1.10.0" - zen-observable "^0.8.0" - -apollo-link-context@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/apollo-link-context/-/apollo-link-context-1.0.20.tgz#1939ac5dc65d6dff0c855ee53521150053c24676" - integrity sha512-MLLPYvhzNb8AglNsk2NcL9AvhO/Vc9hn2ZZuegbhRHGet3oGr0YH9s30NS9+ieoM0sGT11p7oZ6oAILM/kiRBA== - dependencies: - apollo-link "^1.2.14" - tslib "^1.9.3" - -apollo-link-error@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/apollo-link-error/-/apollo-link-error-1.1.13.tgz#c1a1bb876ffe380802c8df0506a32c33aad284cd" - integrity sha512-jAZOOahJU6bwSqb2ZyskEK1XdgUY9nkmeclCrW7Gddh1uasHVqmoYc4CKdb0/H0Y1J9lvaXKle2Wsw/Zx1AyUg== - dependencies: - apollo-link "^1.2.14" - apollo-link-http-common "^0.2.16" - tslib "^1.9.3" - -apollo-link-http-common@^0.2.16: - version "0.2.16" - resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" - integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== - dependencies: - apollo-link "^1.2.14" - ts-invariant "^0.4.0" - tslib "^1.9.3" - -apollo-link-http@^1.5.17: - version "1.5.17" - resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.17.tgz#499e9f1711bf694497f02c51af12d82de5d8d8ba" - integrity sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg== - dependencies: - apollo-link "^1.2.14" - apollo-link-http-common "^0.2.16" - tslib "^1.9.3" - -apollo-link-retry@^2.2.16: - version "2.2.16" - resolved "https://registry.yarnpkg.com/apollo-link-retry/-/apollo-link-retry-2.2.16.tgz#745ff51e60a7a68b34c8d382832856c43a9c306c" - integrity sha512-7F9+meFAz4dw5gtgtLsRFqJW6QzNOhTzt5R5Hsy+yFhkTW9LddgYO7gxN9n7RN/7Ouosh3TcpUkdHs2laC+0sA== - dependencies: - "@types/zen-observable" "0.8.0" - apollo-link "^1.2.14" - tslib "^1.9.3" - -apollo-link@^1.0.0, apollo-link@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" - integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== - dependencies: - apollo-utilities "^1.3.0" - ts-invariant "^0.4.0" - tslib "^1.9.3" - zen-observable-ts "^0.8.21" - -apollo-utilities@1.3.4, apollo-utilities@^1.3.0, apollo-utilities@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" - integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== - dependencies: - "@wry/equality" "^0.1.2" - fast-json-stable-stringify "^2.0.0" - ts-invariant "^0.4.0" - tslib "^1.10.0" +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -3139,18 +3484,23 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== arg@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" - integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^1.0.7: version "1.0.10" @@ -3164,10 +3514,23 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.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== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -3177,12 +3540,12 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" @@ -3192,7 +3555,18 @@ array-union@^2.1.0: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" asn1.js@^5.2.0: version "5.4.1" @@ -3214,7 +3588,7 @@ asn1@~0.2.3: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assert@^1.1.1, assert@^1.4.0: version "1.5.0" @@ -3227,7 +3601,7 @@ assert@^1.1.1, assert@^1.4.0: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types@^0.13.2: version "0.13.4" @@ -3254,27 +3628,22 @@ async-listener@^0.6.0: semver "^5.3.0" shimmer "^1.1.0" -async@0.9.x: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - async@^2.6.3, async@~2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" -async@^3.2.0, async@~3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" - integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== +async@^3.2.0, async@^3.2.3, async@~3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -3307,7 +3676,7 @@ available-typed-arrays@^1.0.5: aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.11.0" @@ -3328,35 +3697,71 @@ axios@^0.21.0: dependencies: follow-redirects "^1.14.0" +axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + +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 sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + babel-core@7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.3.1.tgz#0636a3404c68e07001e434ac4956d82da8a80022" - integrity sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ== +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-jest@^28.1.2: + 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" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.2.0" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-loader@^8.2.2: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" - integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: find-cache-dir "^3.3.1" - loader-utils "^1.4.0" + loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== + dependencies: + babel-runtime "^6.22.0" + babel-plugin-add-module-exports@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz#6caa4ddbe1f578c6a5264d4d3e6c8a2720a7ca2b" @@ -3369,7 +3774,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -3380,39 +3785,67 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277" - integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw== +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz#6ed8e30981b062f8fe6aca8873a37ebcc8cc1c0f" - integrity sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA== +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" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +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.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.4" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz#fa7ca3d1ee9ddc6193600ffb632c9785d54918af" - integrity sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg== +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.2.4" - core-js-compat "^3.18.0" + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz#2e9808f5027c4336c994992b48a4262580cb8d6d" - integrity sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g== +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-transform-es2015-modules-commonjs@^6.26.0: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^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 sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.4" + babel-runtime "^6.22.0" + babel-types "^6.24.1" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -3432,19 +3865,76 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885" - integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - babel-plugin-jest-hoist "^27.2.0" + babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" +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.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 sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.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 sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +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 sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + babelify@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3471,14 +3961,14 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" bezier-easing@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bezier-easing/-/bezier-easing-2.1.0.tgz#c04dfe8b926d6ecaca1813d69ff179b7c2025d86" - integrity sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY= + integrity sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig== big.js@^5.2.2: version "5.2.2" @@ -3502,10 +3992,19 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blessed@0.1.81: version "0.1.81" resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" - integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= + integrity sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ== blob-util@^2.0.2: version "2.0.2" @@ -3523,32 +4022,34 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== bodec@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc" - integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw= + integrity sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ== -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: - bytes "3.1.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" -body-scroll-lock@^3.0.1: +body-scroll-lock@^3.0.1, body-scroll-lock@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== @@ -3556,9 +4057,9 @@ body-scroll-lock@^3.0.1: boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -boxen@^5.0.0, boxen@^5.0.1: +boxen@^5.0.1: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== @@ -3572,6 +4073,20 @@ boxen@^5.0.0, boxen@^5.0.1: widest-line "^3.1.0" wrap-ansi "^7.0.0" +boxen@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.0.0.tgz#9e5f8c26e716793fc96edcf7cf754cdf5e3fbf32" + integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg== + dependencies: + ansi-align "^3.0.1" + camelcase "^7.0.0" + chalk "^5.0.1" + cli-boxes "^3.0.0" + string-width "^5.1.2" + type-fest "^2.13.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3580,6 +4095,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -3596,7 +4118,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3606,7 +4128,7 @@ braces@^3.0.1, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-pack@^6.0.1: version "6.1.0" @@ -3632,6 +4154,11 @@ browser-resolve@^2.0.0: dependencies: resolve "^1.17.0" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -3801,16 +4328,15 @@ browserify@^17.0.0: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@*, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.6, browserslist@^4.6.4: - version "4.17.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" - integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== +browserslist@*, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.21.3, browserslist@^4.6.4: + 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.30001274" - electron-to-chromium "^1.3.886" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" bs-logger@0.x: version "0.2.6" @@ -3829,7 +4355,7 @@ bser@2.1.1: buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-from@^1.0.0: version "1.1.2" @@ -3844,7 +4370,7 @@ buffer-json@^2.0.0: buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0: version "4.9.2" @@ -3855,7 +4381,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0: +buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3874,22 +4400,24 @@ buffer@~5.2.1: builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacache@^12.0.2: version "12.0.4" @@ -3912,7 +4440,7 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.5, cacache@^15.2.0: +cacache@^15.0.5: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -3936,6 +4464,30 @@ cacache@^15.0.5, cacache@^15.2.0: tar "^6.0.2" 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== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3963,25 +4515,12 @@ cache-loader@^4.1.0: neo-async "^2.6.1" schema-utils "^2.0.0" -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^6.0.0: +cacheable-lookup@^6.0.4: version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== -cacheable-request@^7.0.1: +cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== @@ -3995,9 +4534,9 @@ cacheable-request@^7.0.1: responselike "^2.0.0" cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" - integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" + integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== cachedir@^2.3.0: version "2.3.0" @@ -4015,21 +4554,21 @@ call-bind@^1.0.0, call-bind@^1.0.2: caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0: version "3.1.0" @@ -4039,7 +4578,7 @@ callsites@^3.0.0: camel-case@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== dependencies: no-case "^2.2.0" upper-case "^1.1.1" @@ -4058,14 +4597,14 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0, camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= +camelcase@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.0.tgz#fd112621b212126741f998d614cbc2a8623fd174" + integrity sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ== caniuse-api@^3.0.0: version "3.0.0" @@ -4077,15 +4616,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001274: - version "1.0.30001277" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001277.tgz#9416dae5e075f47eacd8e0475ae1dcc5a20e9ca5" - integrity sha512-J2WtYj2Pl6LBEG214XmbGw1gzZEsYuinQFPqYtpZDB3/vm49qNlrcbJrTMkHKmdRDdmXYwkG0tgOBJsuI+J12Q== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001370: + version "1.0.30001375" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" + integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: version "3.0.0" @@ -4098,7 +4637,7 @@ chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -4106,7 +4645,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4115,7 +4654,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4123,35 +4662,45 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== char-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.0.tgz#16f98f3f874edceddd300fda5d58df380a7641a6" - integrity sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" + integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + charm@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" - integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= + integrity sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ== 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.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.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== +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" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -4208,14 +4757,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.1.1, ci-info@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" - integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== - -cint@^8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/cint/-/cint-8.2.1.tgz#70386b1b48e2773d0d63166a55aff94ef4456a12" - integrity sha1-cDhrG0jidz0NYxZqVa/5TvRFahI= + version "3.3.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -4257,6 +4801,11 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -4264,20 +4813,19 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== +cli-table3@~0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: - object-assign "^4.1.0" string-width "^4.2.0" optionalDependencies: - colors "^1.1.2" + "@colors/colors" "1.5.0" -cli-table@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" - integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== +cli-table@^0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" + integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== dependencies: colors "1.0.3" @@ -4288,7 +4836,7 @@ cli-tableau@^2.0.0: dependencies: chalk "3.0.0" -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -4296,19 +4844,27 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +clipboardy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" + integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + arch "^2.2.0" + execa "^5.1.1" + is-wsl "^2.2.0" cliui@^6.0.0: version "6.0.0" @@ -4338,16 +4894,16 @@ clone-deep@^4.0.1: shallow-clone "^3.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" -clone@^2.1.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== cloudinary-build-url@^0.1.1: version "0.1.1" @@ -4356,10 +4912,15 @@ cloudinary-build-url@^0.1.1: dependencies: "@cld-apis/utils" "^0.1.0" +cluster-key-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" + integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== coa@^2.0.2: version "2.0.2" @@ -4370,11 +4931,6 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - coffeeify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/coffeeify/-/coffeeify-3.0.1.tgz#5e2753000c50bd24c693115f33864248dd11136c" @@ -4396,7 +4952,7 @@ collect-v8-coverage@^1.0.0: collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -4418,21 +4974,26 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== +color-string@^1.6.0, color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" @@ -4441,30 +5002,33 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" -colorette@^1.2.2, colorette@^1.4.0: +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colorette@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== +colorette@^2.0.16, colorette@^2.0.17, colorette@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== 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" @@ -4483,7 +5047,7 @@ commander@2.15.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@^2.19.0, commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4498,36 +5062,39 @@ commander@^5.0.0, commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^9.3.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== common-tags@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compress-brotli@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" + integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== + dependencies: + "@types/json-buffer" "~3.0.0" + json-buffer "~3.0.1" + compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -4551,7 +5118,7 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: version "1.6.2" @@ -4566,13 +5133,13 @@ concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@ 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.12: +config-chain@^1.1.11, 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== @@ -4580,17 +5147,16 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== +configstore@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" + integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + dot-prop "^6.0.1" + graceful-fs "^4.2.6" + unique-string "^3.0.0" + write-file-atomic "^3.0.3" + xdg-basedir "^5.0.1" connect@^3.7.0: version "3.7.0" @@ -4622,10 +5188,10 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== consolidate@^0.15.1: version "0.15.1" @@ -4637,14 +5203,14 @@ consolidate@^0.15.1: constants-browserify@^1.0.0, constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.4" @@ -4669,66 +5235,56 @@ 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= - -convict-format-with-validator@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/convict-format-with-validator/-/convict-format-with-validator-6.2.0.tgz#3cab7779e83a89351b9157685cbf20a941414192" - integrity sha512-2LIL3yEZY27M13UHLIP4mGivusP9h2M+X4mYsRBLexwUp8+0sgVk2MgB2b2bnQwkn293lkbkxgdevzn0nZdyzQ== - dependencies: - validator "^13.6.0" - -convict@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/convict/-/convict-6.2.1.tgz#9c7f1442d8d0421b2ac72062e7b52c444b2827eb" - integrity sha512-Mn4AJiYkR3TAZH1Xm/RU7gFS/0kM5TBSAQDry8y40Aez0ASY+3boUhv+3QE5XbOXiXM2JjdhkKve3IsBvWCibQ== - dependencies: - lodash.clonedeep "^4.5.0" - yargs-parser "^20.2.7" + integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== cookie-parser@^1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" - integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" + integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== dependencies: - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie-universal-nuxt@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/cookie-universal-nuxt/-/cookie-universal-nuxt-2.1.5.tgz#669f2ff95b1bc1962c86edd69c954f60729e71e5" - integrity sha512-P0WCTKIyemWNtHi9lxrS5cxZmieOIEjt28B7Alu6cdSB9RqtUtpkqYyV9PRK6oJrT5eIPDYjHsJQlh6SUrFJOg== +cookie-universal-nuxt@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cookie-universal-nuxt/-/cookie-universal-nuxt-2.2.2.tgz#107815f03f5b769de7018670d6370368205387bb" + integrity sha512-Pr6P5UCzl1EAvPh7z7jFkknBw0KTdykm6gFmPHrH4LV9s3flVmAH0ZP/ZqUXcp6b0SKZfizkn+XR1cO+QinGhQ== dependencies: "@types/cookie" "^0.3.3" - cookie-universal "^2.1.5" + cookie-universal "^2.2.2" -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== +cookie-universal@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cookie-universal/-/cookie-universal-2.2.2.tgz#415a4d67b6f7f0819c4914cd69b8c2f496111d30" + integrity sha512-nUXF6HH2YKbn8vGcdSzWJhjRkDHbnbekuVu2nsRu00zYsX7o/H3xGJRlPVoM4wX/8cpJYpyi9nDt+boER0Wjug== dependencies: "@types/cookie" "^0.3.3" cookie "^0.4.0" -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== cookie@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + integrity sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw== cookie@^0.4.0, cookie@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== copy-concurrently@^1.0.0: version "1.0.5" @@ -4745,30 +5301,35 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.12.1, core-js-compat@^3.18.0, core-js-compat@^3.19.0: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.1.tgz#fe598f1a9bf37310d77c3813968e9f7c7bb99476" - integrity sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g== +core-js-compat@^3.12.1, core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" + integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== dependencies: - browserslist "^4.17.6" + browserslist "^4.21.3" semver "7.0.0" -core-js@^2.6.5: +core-js-pure@^3.20.2: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== + +core-js@^2.4.0, core-js@^2.6.5: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.0.1, core-js@^3.6.5: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" - integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== +core-js@^3.6.5: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -4804,17 +5365,6 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - crc@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -4853,17 +5403,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-require@^1.1.1: +create-require@^1.1.0, create-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" - integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== - dependencies: - moment-timezone "^0.5.x" +croner@~4.1.92: + version "4.1.97" + resolved "https://registry.yarnpkg.com/croner/-/croner-4.1.97.tgz#6e373dc7bb3026fab2deb0d82685feef20796766" + integrity sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ== cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" @@ -4874,6 +5422,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -4891,10 +5444,12 @@ crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" css-blank-pseudo@^0.1.4: version "0.1.4" @@ -4906,7 +5461,7 @@ css-blank-pseudo@^0.1.4: css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== css-declaration-sorter@^4.0.1: version "4.0.1" @@ -4965,15 +5520,15 @@ css-select@^2.0.0: nth-check "^1.0.2" css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" @@ -4996,10 +5551,15 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -css-what@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" - integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== css@^2.1.0: version "2.2.4" @@ -5026,6 +5586,11 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + cssnano-preset-default@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" @@ -5065,12 +5630,12 @@ cssnano-preset-default@^4.0.8: cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== cssnano-util-get-match@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== cssnano-util-raw-cache@^4.0.1: version "4.0.1" @@ -5106,6 +5671,11 @@ cssom@^0.4.4: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -5118,20 +5688,30 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^2.6.8: + version "2.6.20" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" + integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== + +csstype@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + cuint@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" - integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + integrity sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw== culvert@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f" - integrity sha1-lQL18BVKLVoioCPnn3HMk2+m728= + integrity sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg== cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== cypress-pipe@^2.0.0: version "2.0.0" @@ -5146,24 +5726,25 @@ cypress-tags@^0.3.0: "@cypress/browserify-preprocessor" "^3.0.1" through "^2.3.8" -cypress@^8.6.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-8.7.0.tgz#2ee371f383d8f233d3425b6cc26ddeec2668b6da" - integrity sha512-b1bMC3VQydC6sXzBMFnSqcvwc9dTZMgcaOzT0vpSD+Gq1yFc+72JDWi55sfUK5eIeNLAtWOGy1NNb6UlhMvB+Q== +cypress@^10.3.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.4.0.tgz#bb5b3b6588ad49eff172fecf5778cc0da2980e4e" + integrity sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew== dependencies: - "@cypress/request" "^2.88.6" + "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" "@types/node" "^14.14.31" - "@types/sinonjs__fake-timers" "^6.0.2" + "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" arch "^2.2.0" blob-util "^2.0.2" bluebird "^3.7.2" + buffer "^5.6.0" cachedir "^2.3.0" chalk "^4.1.0" check-more-types "^2.24.0" cli-cursor "^3.1.0" - cli-table3 "~0.6.0" + cli-table3 "~0.6.1" commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.10.4" @@ -5182,16 +5763,15 @@ cypress@^8.6.0: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.5" + minimist "^1.2.6" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" - ramda "~0.27.1" request-progress "^3.0.0" + semver "^7.3.2" supports-color "^8.1.1" tmp "~0.2.1" untildify "^4.0.0" - url "^0.11.0" yauzl "^2.10.0" dash-ast@^1.0.0: @@ -5202,7 +5782,7 @@ dash-ast@^1.0.0: dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" @@ -5220,15 +5800,24 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dateformat@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +dateformat@^4.5.1: + version "4.6.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== dayjs@^1.10.4: - version "1.10.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + version "1.11.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" + integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== dayjs@~1.8.24, dayjs@~1.8.25: version "1.8.36" @@ -5238,19 +5827,34 @@ dayjs@~1.8.24, dayjs@~1.8.25: de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +deasync@^0.1.15: + 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" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" @@ -5264,9 +5868,14 @@ debug@^3.1.0, debug@^3.2.6: decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.2.1: +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.2.1, decimal.js@^10.3.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== @@ -5274,14 +5883,7 @@ decimal.js@^10.2.1: decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== decompress-response@^6.0.0: version "6.0.0" @@ -5293,7 +5895,7 @@ decompress-response@^6.0.0: dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-extend@^0.6.0: version "0.6.0" @@ -5318,34 +5920,30 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -defer-to-connect@^2.0.0: +defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-properties@^1.1.2, define-properties@^1.1.3, 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: - object-keys "^1.0.12" + 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" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -5360,12 +5958,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= - -defu@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/defu/-/defu-2.0.4.tgz#09659a6e87a8fd7178be13bd43e9357ebf6d1c46" - integrity sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg== + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== defu@^3.2.2: version "3.2.2" @@ -5378,34 +5971,49 @@ defu@^4.0.1: integrity sha512-lC+G0KvvWRbisQa50+iFelm3/eMmwo4IlBmfASOVlw9MZpHHyQeVsZxc5j23+TQy5ydgEoTVSrWl7ptou1kzJQ== defu@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/defu/-/defu-5.0.0.tgz#5768f0d402a555bfc4c267246b20f82ce8b5a10b" - integrity sha512-VHg73EDeRXlu7oYWRmmrNp/nl7QkdXUxkQQKig0Zk8daNmm84AbGoC8Be6/VVLJEKxn12hR0UBmz8O+xQiAPKQ== + version "5.0.1" + resolved "https://registry.yarnpkg.com/defu/-/defu-5.0.1.tgz#a034278f9b032bf0845d261aa75e9ad98da878ac" + integrity sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ== -degenerator@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.1.tgz#7ef78ec0c8577a544477308ddf1d2d6e88d51f5b" - integrity sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ== +defu@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.0.0.tgz#b397a6709a2f3202747a3d9daf9446e41ad0c5fc" + integrity sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw== + +degenerator@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" + integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== dependencies: ast-types "^0.13.2" escodegen "^1.8.1" esprima "^4.0.0" - vm2 "^3.9.3" + vm2 "^3.9.8" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^1.1.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== deps-sort@^2.0.0, deps-sort@^2.0.1: version "2.0.1" @@ -5425,20 +6033,25 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destr@^1.0.0, destr@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/destr/-/destr-1.1.0.tgz#2da6add6ba71e04fd0abfb1e642d4f6763235095" - integrity sha512-Ev/sqS5AzzDwlpor/5wFCDu0dYMQu/0x2D6XfAsQ0E7uQmamIgYJ6Dppo2T2EOFVkeVYWjc+PCLKaqZZ57qmLg== +destr@^1.1.0, destr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/destr/-/destr-1.1.1.tgz#910457d10a2f2f247add4ca4fdb4a03adcc49079" + integrity sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg== -destroy@^1.0.4, destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0, destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== detect-newline@^3.0.0: version "3.1.0" @@ -5446,29 +6059,44 @@ 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" resolved "https://registry.yarnpkg.com/devalue/-/devalue-2.0.1.tgz#5d368f9adc0928e47b77eea53ca60d2f346f9762" integrity sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q== -diff-sequences@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" - integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== +diff-sequences@^27.5.1: + version "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-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== +diff@^4.0.1: + version "4.0.2" + 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" @@ -5485,6 +6113,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +dom-accessibility-api@^0.5.6: + 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" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -5493,9 +6126,9 @@ dom-converter@^0.2.0: utila "~0.4" dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.1.0.tgz#120c1f92ddea7758db1ccee0a100a33c39f4701b" + integrity sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ== dom-serializer@0: version "0.2.2" @@ -5506,9 +6139,9 @@ dom-serializer@0: entities "^2.0.0" dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" @@ -5525,9 +6158,9 @@ domelementtype@1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^2.0.1: version "2.0.1" @@ -5536,17 +6169,31 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" - integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +domhandler@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" -dompurify@^2.0.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.3.tgz#c1af3eb88be47324432964d8abc75cf4b98d634c" - integrity sha512-dqnqRkPMAjOZE0FogZ+ceJNM2dZ3V/yNOuFB7+39qpO93hHhfRpHw3heYQC7DPK9FqbQTfBKUJhiSfz4MvXYwg== +dompurify@^2.3.8: + version "2.3.10" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.10.tgz#901f7390ffe16a91a5a556b94043314cd4850385" + integrity sha512-o7Fg/AgC7p/XpKjf/+RC3Ok6k4St5F7Q6q6+Nnm3p2zGWioAY6dh0CbbuwOhH2UcSzKsdniE/YnE2/92JcsA+g== domutils@^1.7.0: version "1.7.0" @@ -5556,7 +6203,7 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.5.2, domutils@^2.6.0: +domutils@^2.4.2, domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -5580,10 +6227,17 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== dotenv@^9.0.2: version "9.0.2" @@ -5593,15 +6247,10 @@ dotenv@^9.0.2: 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" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -5617,10 +6266,15 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -5638,19 +6292,19 @@ editorconfig@^0.15.3: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.0.2, ejs@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" - integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== +ejs@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== dependencies: - jake "^10.6.1" + jake "^10.8.5" -electron-to-chromium@^1.3.886: - version "1.3.889" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.889.tgz#0b7c6f7628559592d5406deda281788f37107790" - integrity sha512-suEUoPTD1mExjL9TdmH7cvEiWJVM2oEiAi+Y1p0QKxI2HcRlT44qDTP2c1aZmVwRemIPYOpxmV7CxQCOWcm4XQ== +electron-to-chromium@^1.4.202: + version "1.4.217" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.217.tgz#f1f51b319435f4c1587a850806a0dfebe9774598" + integrity sha512-iX8GbAMij7cOtJPZo02CClpaPMWjvN5meqXiJXkBgwvraNWTNH0Z7F9tkznI34JRPtWASoPM/xWamq3oNb49GA== elliptic@^6.5.3: version "6.5.4" @@ -5672,21 +6326,26 @@ emitter-listener@^1.1.1: dependencies: shimmer "^1.2.0" +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + emittery@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -5695,16 +6354,16 @@ emojis-list@^3.0.0: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.12: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5732,6 +6391,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" + integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -5757,37 +6421,45 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - stackframe "^1.1.1" + stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.18.5, 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== +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: + 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-symbols "^1.0.2" + 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.1" + is-negative-zero "^2.0.2" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + 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-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-to-primitive@^1.2.1: version "1.2.1" @@ -5803,31 +6475,31 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-goat@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" + integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -5882,6 +6554,11 @@ estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5890,22 +6567,22 @@ esutils@^2.0.2: etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter2@5.0.1, eventemitter2@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" - integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= + integrity sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg== eventemitter2@^6.3.1, eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== + 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" - integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== events@^2.0.0: version "2.1.0" @@ -5920,7 +6597,7 @@ events@^3.0.0: eventsource-polyfill@^0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz#10e0d187f111b167f28fdab918843ce7d818f13c" - integrity sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw= + integrity sha512-LyMFp2oPDGhum2lMvkjqKZEwWd2/AoXyt8aoyftTBMWwPHNgU+2tdxhTHPluDxoz+z4gNj0uHAPR9nqevATMbg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -5960,6 +6637,21 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -5970,12 +6662,12 @@ executable@^4.1.1: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5985,50 +6677,54 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.3.1.tgz#d0f170b1f5c8a2009bab0beffd4bb94f043e38e7" - integrity sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - "@jest/types" "^27.2.5" - ansi-styles "^5.0.0" - jest-get-type "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-regex-util "^27.0.6" + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== +express@4.18.1, express@^4.17.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.20.0" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.10.3" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -6036,14 +6732,14 @@ express@^4.17.1: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -6089,7 +6785,7 @@ extract-css-chunks-webpack-plugin@^4.9.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" @@ -6107,7 +6803,7 @@ extract-zip@2.0.1: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" @@ -6119,10 +6815,10 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6131,9 +6827,9 @@ fast-glob@^3.1.1: micromatch "^4.0.4" fast-json-patch@^3.0.0-1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.0.tgz#ec8cd9b9c4c564250ec8b9140ef7a55f70acaee6" - integrity sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -6143,7 +6839,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-memoize@^2.5.2: version "2.5.2" @@ -6172,12 +6868,12 @@ fb-watchman@^2.0.0: fclone@1.0.11, fclone@~1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" - integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= + integrity sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw== fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" @@ -6189,7 +6885,7 @@ figgy-pudding@^3.5.1: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" @@ -6219,16 +6915,16 @@ file-uri-to-path@2: integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== filelist@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" - integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: - minimatch "^3.0.4" + minimatch "^5.0.1" fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -6245,9 +6941,9 @@ fill-range@^7.0.1: filter-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== -finalhandler@1.1.2, finalhandler@~1.1.2: +finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== @@ -6260,6 +6956,27 @@ finalhandler@1.1.2, finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -6301,7 +7018,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat@^5.0.0: +flat@^5.0.0, flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== @@ -6319,30 +7036,32 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.10.0, follow-redirects@^1.14.0: - version "1.14.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" - integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== +follow-redirects@^1.10.0, follow-redirects@^1.14.0, follow-redirects@^1.14.8: + version "1.15.1" + 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= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== fork-ts-checker-webpack-plugin@^6.1.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz#057e477cf1d8b013b2ed2669437f818680289c4c" - integrity sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -6358,6 +7077,11 @@ fork-ts-checker-webpack-plugin@^6.1.1: semver "^7.3.2" tapable "^1.0.0" +form-data-encoder@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.0.1.tgz#aec41860aca0275cb6026650d139c6701b0992c1" + integrity sha512-Oy+P9w5mnO4TWXVgUiQvggNKPI9/ummcSt5usuIV6HkaLKigwzPpoenhEqmGmx3zHqm6ZLJ+CR/99N8JLinaEw== + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -6367,6 +7091,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -6389,24 +7122,38 @@ fp-and-or@^0.1.3: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -6424,7 +7171,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -6446,7 +7193,7 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-monkey@1.0.3: +fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== @@ -6454,7 +7201,7 @@ fs-monkey@1.0.3: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -6464,7 +7211,7 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: version "1.2.13" @@ -6479,7 +7226,7 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsu@^1.0.2: +fsu@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fsu/-/fsu-1.1.1.tgz#bd36d3579907c59d85b257a75b836aa9e0c31834" integrity sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A== @@ -6487,7 +7234,7 @@ fsu@^1.0.2: ftp@^0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== dependencies: readable-stream "1.1.x" xregexp "2.0.0" @@ -6497,19 +7244,34 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= +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: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +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.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -6527,28 +7289,23 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + has-symbols "^1.0.3" get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-port-please@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-2.2.0.tgz#3fabbbe2f9d8e6b7c47e1cddd71fc4c593f1deac" - integrity sha512-1c7Np/cpA7XCB6IrPAdaBaJjlGHTqg4P82h/ZqyBL6dCdwRzZBOFGZO7FL2KaZ2uNvD6v8QilA7LZwMpmIggDQ== +get-port-please@^2.2.0, get-port-please@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-2.6.1.tgz#80143de24fcaab39b01df977f66ad967e06b17d1" + integrity sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A== dependencies: fs-memo "^1.2.0" @@ -6557,13 +7314,6 @@ get-stdin@^8.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -6571,7 +7321,7 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -6599,7 +7349,7 @@ get-uri@3: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getos@^3.2.1: version "3.2.1" @@ -6611,7 +7361,7 @@ getos@^3.2.1: getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -6623,12 +7373,12 @@ git-config-path@^2.0.0: git-node-fs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f" - integrity sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8= + integrity sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ== git-sha1@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745" - integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U= + integrity sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg== git-up@^4.0.0: version "4.0.5" @@ -6645,10 +7395,15 @@ git-url-parse@^11.4.4: dependencies: git-up "^4.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-all@^3.1.0, glob-all@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.2.1.tgz#082ca81afd2247cbd3ed2149bb2630f4dc877d95" - integrity sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.3.0.tgz#2019896fbaeb37bc451809cf0cb1e5d2b3e345b2" + integrity sha512-30gCh9beSb+YSAh0vsoIlBRm4bSlyMa+5nayax1EJhjwYrCohX0aDxcxvWVe3heOrJikbHgRs75Af6kPLcumew== dependencies: glob "^7.1.2" yargs "^15.3.1" @@ -6656,7 +7411,7 @@ glob-all@^3.1.0, glob-all@^3.2.1: glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -6668,7 +7423,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -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: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -6680,6 +7435,29 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.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: + 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== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" @@ -6692,77 +7470,63 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + globby@^11.0.3, globby@^11.0.4: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -google-fonts-helper@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/google-fonts-helper/-/google-fonts-helper-1.2.0.tgz#32eb8ebf9816dbb2ec8acda81ad03a021ed44050" - integrity sha512-ojpHo6uwaqI2/tpXcCBY9u/3erd++Wjpf1UQkmb+ZUa/oMztiospubmQCwDQ0AHhFUkBMW1+R12am1kxQFqymg== - dependencies: - deepmerge "^4.2.2" - fs-extra "^9.0.1" - got "^11.8.1" - -got@^11.8.1: - version "11.8.2" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" - integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== +got@^12.1.0: + 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.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.1" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" + form-data-encoder "^2.0.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" responselike "^2.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -graphql-tag@^2.12.3, graphql-tag@^2.12.5: - version "2.12.5" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.5.tgz#5cff974a67b417747d05c8d9f5f3cb4495d0db8f" - integrity sha512-5xNhP4063d16Pz3HBtKprutsPrmHZi5IdUGOWRxA2B6VF7BIRGOHZ5WQvDmJXZuPcBg7rYwaFxvQYjqkSdR3TQ== +graceful-fs@4.2.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== dependencies: tslib "^2.1.0" -graphql@^15.6.1: - version "15.7.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.7.2.tgz#85ab0eeb83722977151b3feb4d631b5f2ab287ef" - integrity sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A== +graphql@^16.3.0: + version "16.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" + integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== gzip-size@^6.0.0: version "6.0.0" @@ -6776,24 +7540,6 @@ hable@^3.0.0: resolved "https://registry.yarnpkg.com/hable/-/hable-3.0.0.tgz#6de089b2df946635cf8134b9e4859f1b62de255f" integrity sha512-7+G0/2/COR8pwteYFqHIVYfQpuEiO2HXwJrhCBJVgrNrl9O5eaUoJVDGXUJX+0RpGncNVTuestexjk1afj01wQ== -hammerjs@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" - integrity sha1-BO93hiz/K7edMPdpIJWTAiK/YPE= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - hard-source-webpack-plugin@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz#a99071e25b232f1438a5bc3c99f10a3869e4428e" @@ -6816,29 +7562,36 @@ hard-source-webpack-plugin@^0.13.1: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "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.1, 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" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -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-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, 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" @@ -6847,15 +7600,15 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -6864,7 +7617,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -6873,20 +7626,20 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has-yarn@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" + integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== has@^1.0.0, has@^1.0.3: version "1.0.3" @@ -6907,7 +7660,7 @@ hash-base@^3.0.0: hash-sum@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== hash-sum@^2.0.0: version "2.0.0" @@ -6935,6 +7688,11 @@ he@1.2.0, he@^1.1.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +helmet@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-5.1.1.tgz#609823c5c2e78aea62dd9afc8f544ca409da5e85" + integrity sha512-/yX0oVZBggA9cLJh8aw3PPCfedBnbd7J2aowjzsaWwZh7/UFY0nccn/aHAggIgWUFfnykX8GKd3a1pSbrmlcVQ== + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -6943,7 +7701,7 @@ hex-color-regex@^1.1.0: hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -6961,22 +7719,22 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== +hosted-git-info@^5.0.0: + 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 "^6.0.0" + lru-cache "^7.5.1" hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== hsla-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -6985,10 +7743,17 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + html-entities@^2.1.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" - integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-escaper@^2.0.0: version "2.0.2" @@ -7024,7 +7789,7 @@ html-minifier@^4.0.0: html-tags@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== html-webpack-plugin@^4.5.1: version "4.5.2" @@ -7044,7 +7809,17 @@ 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" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" + integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.3.0" + domutils "^2.4.2" + entities "^2.0.0" htmlparser2@^6.1.0: version "6.1.0" @@ -7061,27 +7836,16 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - depd "~1.1.2" + depd "2.0.0" inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" @@ -7092,32 +7856,46 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== dependencies: assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + jsprim "^2.0.2" + sshpk "^1.14.1" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== +http2-wrapper@^2.1.10: + version "2.1.11" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.1.11.tgz#d7c980c7ffb85be3859b6a96c800b2951ae257ef" + integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== dependencies: quick-lru "^5.1.1" - resolve-alpn "^1.0.0" + resolve-alpn "^1.2.0" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== +https-proxy-agent@5, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -7132,10 +7910,15 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" @@ -7146,7 +7929,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: +iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -7168,36 +7951,46 @@ ieee754@^1.1.13, ieee754@^1.1.4: iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== -ignore-walk@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: - minimatch "^3.0.4" + minimatch "^5.0.1" + +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +image-meta@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.1.1.tgz#a84dc7d5f61c7d60e85ec0c3ac81beee8646039b" + integrity sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw== -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg== dependencies: import-from "^2.1.0" import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -7208,19 +8001,19 @@ import-fresh@^3.1.0, import-fresh@^3.2.1: import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w== dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== import-local@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" - integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -7228,7 +8021,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -7238,7 +8031,7 @@ indent-string@^4.0.0: indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" @@ -7248,7 +8041,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -7261,12 +8054,12 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@2.0.0: version "2.0.0" @@ -7281,7 +8074,7 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: 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" @@ -7329,25 +8122,71 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ioredis@^4.0.0: + version "4.28.5" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" + integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== + dependencies: + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-commands "1.7.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +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" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipx@^0.9.9: + version "0.9.10" + resolved "https://registry.yarnpkg.com/ipx/-/ipx-0.9.10.tgz#8e97d9742c165bd15f8d95046bbb6c6970f95e03" + integrity sha512-HymTmXe2QBiPMgsJg1EQtUYgTXfIB9ha7j8tHCQqYGDS7bTYMNWyq/fBdI3S+wc9ic+hbPlTim+uf8QgZcEykQ== + dependencies: + consola "^2.15.3" + defu "^6.0.0" + destr "^1.1.1" + etag "^1.8.1" + image-meta "^0.1.1" + listhen "^0.2.13" + ohmyfetch "^0.4.18" + pathe "^0.3.2" + sharp "^0.30.7" + ufo "^0.8.5" + xss "^1.0.13" + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -7369,7 +8208,7 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" @@ -7386,7 +8225,7 @@ is-bigint@^1.0.1: is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" @@ -7405,12 +8244,12 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.1.0, is-buffer@^1.1.5: +is-buffer@^1.1.0, is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -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== @@ -7429,7 +8268,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0: +is-ci@^3.0.0, is-ci@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== @@ -7439,7 +8278,7 @@ is-ci@^3.0.0: is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== dependencies: css-color-names "^0.0.4" hex-color-regex "^1.1.0" @@ -7448,17 +8287,17 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.2.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -7497,9 +8336,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== -is-docker@^2.2.1: +is-docker@^2.0.0, is-docker@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -7507,7 +8346,7 @@ is-docker@^2.2.1: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -7519,25 +8358,18 @@ is-extendable@^1.0.1: is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -7553,7 +8385,7 @@ is-generator-function@^1.0.7: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" @@ -7564,11 +8396,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -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" @@ -7585,29 +8412,29 @@ is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +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== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-npm@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" + integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -7616,11 +8443,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -7634,7 +8456,12 @@ is-path-inside@^3.0.2: is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -7656,33 +8483,35 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-shared-array-buffer@^1.0.1: - version "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" - integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: - protocols "^1.1.0" + protocols "^2.0.1" is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -7697,38 +8526,38 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -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: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-weakref@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" - integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== +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== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" 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.2: version "1.0.2" @@ -7738,39 +8567,55 @@ is-windows@^1.0.2: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.0.tgz#714d94453327db9ea98fbf1a0c5f2b88f59ddd5c" + integrity sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-dompurify@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/isomorphic-dompurify/-/isomorphic-dompurify-0.20.0.tgz#28f9ae93224741811dc0a18dda564d68fe84b700" + integrity sha512-ha3GBgVb9faPfGknAkwokYxqvdnh6c+R33LtgoXj4Lttg3b5DN5YH1P3zX1AHFFvTCOL7TER5zwGnUbJcQ85Cw== + dependencies: + "@types/dompurify" "^2.3.3" + dompurify "^2.3.8" + jsdom "^20.0.0" isomorphic-fetch@^3.0.0: version "3.0.0" @@ -7783,27 +8628,17 @@ isomorphic-fetch@^3.0.0: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -7829,285 +8664,315 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" - integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== dependencies: - async "0.9.x" - chalk "^2.4.2" + async "^3.2.3" + chalk "^4.0.2" filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.3.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.3.0.tgz#22a02cc2b34583fc66e443171dc271c0529d263c" - integrity sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.3.1.tgz#1679e74387cbbf0c6a8b42de963250a6469e0797" - integrity sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/environment" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.3.1" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.3.1.tgz#b576f9d146ba6643ce0a162d782b40152b6b1d16" - integrity sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q== +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: - "@jest/core" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" yargs "^16.2.0" -jest-config@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.3.1.tgz#cb3b7f6aaa8c0a7daad4f2b9573899ca7e09bbad" - integrity sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.3.1" - "@jest/types" "^27.2.5" - babel-jest "^27.3.1" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" - graceful-fs "^4.2.4" - jest-circus "^27.3.1" - jest-environment-jsdom "^27.3.1" - jest-environment-node "^27.3.1" - jest-get-type "^27.3.1" - jest-jasmine2 "^27.3.1" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-runner "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" micromatch "^4.0.4" - pretty-format "^27.3.1" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" jest-date-mock@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/jest-date-mock/-/jest-date-mock-1.0.8.tgz#13468c0352c5a3614c6b356dbc6b88eb37d9e0b3" integrity sha512-0Lyp+z9xvuNmLbK+5N6FOhSiBeux05Lp5bbveFBmYo40Aggl2wwxFoIrZ+rOWC8nDNcLeBoDd2miQdEDSf3iQw== -jest-diff@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" - integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: chalk "^4.0.0" - diff-sequences "^27.0.6" - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-docblock@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" - integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== +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" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.3.1.tgz#14c56bb4f18dd18dc6bdd853919b5f16a17761ff" - integrity sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" - -jest-environment-jsdom-sixteen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom-sixteen/-/jest-environment-jsdom-sixteen-2.0.0.tgz#0f8c12663ccd9836d248574decffc575bfb091e1" - integrity sha512-BF+8P67aEJcd78TQzwSb9P4a73cArOWb5KgqI8eU6cHRWDIJdDRE8XTeZAmOuDSDhKpuEXjKkXwWB3GOJvqHJQ== - dependencies: - "@jest/fake-timers" "^25.1.0" - jest-mock "^25.1.0" - jest-util "^25.1.0" - jsdom "^16.2.1" - -jest-environment-jsdom@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz#63ac36d68f7a9303494df783494856222b57f73e" - integrity sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg== - dependencies: - "@jest/environment" "^27.3.1" - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" jsdom "^16.6.0" -jest-environment-node@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.3.1.tgz#af7d0eed04edafb740311b303f3fe7c8c27014bb" - integrity sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw== +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== dependencies: - "@jest/environment" "^27.3.1" - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "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@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" - integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== +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.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.3.1.tgz#7656fbd64bf48bda904e759fc9d93e2c807353ee" - integrity sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg== +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" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^27.0.6" - jest-serializer "^27.0.6" - jest-util "^27.3.1" - jest-worker "^27.3.1" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz#df6d3d07c7dafc344feb43a0072a6f09458d32b0" - integrity sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg== +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.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.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.3.1" - "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.3.1" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" throat "^6.0.1" -jest-leak-detector@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz#7fb632c2992ef707a1e73286e1e704f9cc1772b2" - integrity sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg== +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== dependencies: - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-localstorage-mock@^2.4.18: - version "2.4.18" - resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.18.tgz#6cf5f84fdc5d8e279f2b45a9417bac1d4fc765d6" - integrity sha512-zQTrtPeyGXvqM9Vw8nYd39Z0YAD2SK2hptyxLLaR/Ci5X72pcPBaiTDTfTeNq8FOuH/aVUSp8jhJUeFHMhuNeg== +jest-localstorage-mock@^2.4.21: + 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.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz#257ad61e54a6d4044e080d85dbdc4a08811e9c1c" - integrity sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w== +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" - jest-diff "^27.3.1" - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== +jest-matcher-utils@^28.0.0: + 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: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" -jest-message-util@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.3.1.tgz#f7c25688ad3410ab10bcb862bcfe3152345c6436" - integrity sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg== +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" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.3.1" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^25.1.0, jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== +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: - "@jest/types" "^25.5.0" + "@babel/code-frame" "^7.12.13" + "@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.3" + slash "^3.0.0" + stack-utils "^2.0.3" -jest-mock@^27.3.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.3.0.tgz#ddf0ec3cc3e68c8ccd489bef4d1f525571a1b867" - integrity sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -8115,103 +8980,103 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^27.0.0, jest-regex-util@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" - integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz#85b99bdbdfa46e2c81c6228fc4c91076f624f6e2" - integrity sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A== +jest-regex-util@^28.0.0, jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: - "@jest/types" "^27.2.5" - jest-regex-util "^27.0.6" - jest-snapshot "^27.3.1" + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" -jest-resolve@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.3.1.tgz#0e5542172a1aa0270be6f66a65888647bdd74a3e" - integrity sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw== +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.3.1.tgz#1d594dcbf3bd8600a7e839e790384559eaf96e3e" - integrity sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: - "@jest/console" "^27.3.1" - "@jest/environment" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-docblock "^27.0.6" - jest-environment-jsdom "^27.3.1" - jest-environment-node "^27.3.1" - jest-haste-map "^27.3.1" - jest-leak-detector "^27.3.1" - jest-message-util "^27.3.1" - jest-resolve "^27.3.1" - jest-runtime "^27.3.1" - jest-util "^27.3.1" - jest-worker "^27.3.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.3.1.tgz#80fa32eb85fe5af575865ddf379874777ee993d7" - integrity sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg== - dependencies: - "@jest/console" "^27.3.1" - "@jest/environment" "^27.3.1" - "@jest/globals" "^27.3.1" - "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" - "@types/yargs" "^16.0.0" +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" - jest-message-util "^27.3.1" - jest-mock "^27.3.0" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^16.2.0" -jest-serializer@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" - integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" jest-silent-reporter@^0.5.0: version "0.5.0" @@ -8221,34 +9086,32 @@ jest-silent-reporter@^0.5.0: chalk "^4.0.0" jest-util "^26.0.0" -jest-snapshot@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.3.1.tgz#1da5c0712a252d70917d46c037054f5918c49ee4" - integrity sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" - "@babel/parser" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.3.1" - graceful-fs "^4.2.4" - jest-diff "^27.3.1" - jest-get-type "^27.3.1" - jest-haste-map "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-resolve "^27.3.1" - jest-util "^27.3.1" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^27.3.1" + pretty-format "^27.5.1" semver "^7.3.2" jest-transform-stub@^2.0.0: @@ -8256,17 +9119,6 @@ jest-transform-stub@^2.0.0: resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d" integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg== -jest-util@^25.1.0, jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" - jest-util@^26.0.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" @@ -8279,29 +9131,41 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429" - integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw== +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +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.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.3.1.tgz#3a395d61a19cd13ae9054af8cdaf299116ef8a24" - integrity sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.5.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.3.1" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^27.3.1" + pretty-format "^27.5.1" jest-watch-toggle-config@^2.0.1: version "2.0.1" @@ -8310,33 +9174,47 @@ jest-watch-toggle-config@^2.0.1: dependencies: chalk "^4.1.0" -jest-watch-typeahead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz#4de2ca1eb596acb1889752afbab84b74fcd99173" - integrity sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw== +jest-watch-typeahead@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" + integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== dependencies: ansi-escapes "^4.3.1" chalk "^4.0.0" - jest-regex-util "^27.0.0" - jest-watcher "^27.0.0" + jest-regex-util "^28.0.0" + jest-watcher "^28.0.0" slash "^4.0.0" string-length "^5.0.1" strip-ansi "^7.0.1" -jest-watcher@^27.0.0, jest-watcher@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.3.1.tgz#ba5e0bc6aa843612b54ddb7f009d1cbff7e05f3e" - integrity sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA== +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^28.0.0: + 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" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.3.1" + emittery "^0.10.2" + jest-util "^28.1.3" string-length "^4.0.1" -jest-worker@^26.2.1, jest-worker@^26.5.0: +jest-worker@^26.5.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -8345,23 +9223,32 @@ jest-worker@^26.2.1, jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2" - integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g== +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +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" supports-color "^8.0.0" -jest@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.3.1.tgz#b5bab64e8f56b6f7e275ba1836898b0d9f1e5c8a" - integrity sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng== +jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^27.3.1" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^27.3.1" + jest-cli "^27.5.1" jimp-compact@^0.16.1: version "0.16.1" @@ -8369,24 +9256,24 @@ jimp-compact@^0.16.1: integrity sha512-F/r0L283J46xiGUEvUb3jxUsei7aB94g3NRIMuJ4WhbpEcJV2U5GpaUNJLnBiOP2+x4lLTI4UiRVrmbrXQAOMA== jiti@^1.9.2: - version "1.12.9" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.12.9.tgz#2ce45b265cfc8dc91ebd70a5204807cf915291bc" - integrity sha512-TdcJywkQtcwLxogc4rSMAi479G2eDPzfW0fLySks7TPhgZZ4s/tM6stnzayIh3gS/db3zExWJyUx4cNWrwAmoQ== + version "1.14.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.14.0.tgz#5350fff532a4d891ca4bcd700c47c1f40e6ee326" + integrity sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A== jju@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= + integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== -js-beautify@^1.6.12: - 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== +js-beautify@^1.6.12, js-beautify@^1.6.14: + version "1.14.5" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.5.tgz#d544e3ac94371af3a4eadec0dea9fc1cd15743b9" + integrity sha512-P2BfZBhXchh10uZ87qMKpM2tfcDXLA+jDiWU/OV864yWdTGzLUGNAdp9Y1ID5ubpNVGls3cZ1UMcO8myUB+UyA== 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" @@ -8396,7 +9283,7 @@ js-cookie@^3.0.0: js-git@^0.7.8: version "0.7.8" resolved "https://registry.yarnpkg.com/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444" - integrity sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ= + integrity sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA== dependencies: bodec "^0.1.0" culvert "^0.1.2" @@ -8408,6 +9295,18 @@ js-git@^0.7.8: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== + +js-yaml@4.1.0, js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -8416,19 +9315,12 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^16.2.1, jsdom@^16.6.0: +jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== @@ -8461,6 +9353,39 @@ jsdom@^16.2.1, jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" +jsdom@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== + dependencies: + abab "^2.0.6" + acorn "^8.7.1" + acorn-globals "^6.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + 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.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "^7.0.0" + saxes "^6.0.0" + 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 "^11.0.0" + ws "^8.8.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8469,14 +9394,9 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.1: +json-buffer@3.0.1, json-buffer@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== @@ -8486,7 +9406,7 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -8494,7 +9414,7 @@ json-parse-even-better-errors@^2.3.0: json-parse-helpfulerror@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" - integrity sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w= + integrity sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg== dependencies: jju "^1.1.0" @@ -8503,29 +9423,27 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== 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" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.1.1, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== json5@^1.0.1: version "1.0.1" @@ -8534,10 +9452,15 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.1, json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -8553,53 +9476,47 @@ jsonfile@^6.0.1: jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== jsonlines@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/jsonlines/-/jsonlines-0.1.1.tgz#4fcd246dc5d0e38691907c44ab002f782d1d94cc" - integrity sha1-T80kbcXQ44aRkHxEqwAveC0dlMw= + integrity sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA== jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - keyv@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" - integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== + version "4.3.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" + integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== dependencies: + compress-brotli "^1.3.8" json-buffer "3.0.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -8618,6 +9535,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kleur@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + klona@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" @@ -8639,42 +9561,42 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== dependencies: - package-json "^6.3.0" + package-json "^8.1.0" launch-editor-middleware@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" - integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + version "2.5.0" + resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.5.0.tgz#49d7fedaa06d939a3a780cdf7af959b789934700" + integrity sha512-kv9MMO81pbYjznk9j/DBu0uBGxIpT6uYhGajq6fxdGEPb+DCRBoS96jGkhe3MJumdY3zZFkuS8CFPTZI9DaBNw== dependencies: - launch-editor "^2.2.1" + launch-editor "^2.5.0" -launch-editor@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" - integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== +launch-editor@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.5.0.tgz#d646fcc15ed8589b998950cad1102827d9dcadce" + integrity sha512-coRiIMBJ3JF7yX8nZE4Fr+xxUy+3WTRsDSwIzHghU28gjXwkAWsvac3BpZrL/jHtbiqQ4TiRAyTJmsgErNk1jQ== dependencies: - chalk "^2.3.0" - shell-quote "^1.6.1" + picocolors "^1.0.0" + shell-quote "^1.7.3" 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" resolved "https://registry.yarnpkg.com/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" - integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= + integrity sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA== leaflet@^1.5.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" - integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== + version "1.8.0" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.8.0.tgz#4615db4a22a304e8e692cae9270b983b38a2055e" + integrity sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA== leven@^3.1.0: version "3.1.0" @@ -8684,63 +9606,85 @@ leven@^3.1.0: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmconfig@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" - integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== - dependencies: - figgy-pudding "^3.5.1" - find-up "^3.0.0" - ini "^1.3.5" +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@^11.2.4: - version "11.2.6" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" - integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== - dependencies: - cli-truncate "2.1.0" - colorette "^1.4.0" - commander "^8.2.0" - cosmiconfig "^7.0.1" - debug "^4.3.2" - enquirer "^2.3.6" - execa "^5.1.1" - listr2 "^3.12.2" - micromatch "^4.0.4" + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^13.0.3: + version "13.0.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" + integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.17" + commander "^9.3.0" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "3.3.0" - supports-color "8.1.1" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.1" + +listhen@^0.2.13: + version "0.2.15" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-0.2.15.tgz#1af0f47f94a09d5f3ba4efa5a4b07df65198bb59" + integrity sha512-F/IWj/aJLeokHAIVY+l3JoWRUnbRaf2F0cr+Ybc1YyozMA/yP0C2nf3c0Oi7vAbFvtfiwfWWfP7bIrQc/u5L1A== + dependencies: + clipboardy "^3.0.0" + colorette "^2.0.19" + defu "^6.0.0" + get-port-please "^2.6.1" + http-shutdown "^1.2.2" + selfsigned "^2.0.1" + ufo "^0.8.5" + +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" -listr2@^3.12.2, listr2@^3.8.3: - version "3.13.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.3.tgz#d8f6095c9371b382c9b1c2bc33c5941d8e177f11" - integrity sha512-VqAgN+XVfyaEjSaFewGPcDs5/3hBbWVaX1VgWv2f52MF7US45JuARlArULctiB44IIcEk3JF7GtoFCLqEdeuPA== +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== dependencies: cli-truncate "^2.1.0" - clone "^2.1.2" colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^7.4.0" + rfdc "^1.3.0" + rxjs "^7.5.5" through "^2.3.8" wrap-ansi "^7.0.0" load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -8753,11 +9697,11 @@ loader-runner@^2.4.0: integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== loader-runner@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -8805,24 +9749,39 @@ lodash-es@^4.17.15, lodash-es@^4.17.21: lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== 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" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== 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.8, lodash.isfunction@^3.0.9: +lodash.isfunction@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== @@ -8830,27 +9789,27 @@ lodash.isfunction@^3.0.8, lodash.isfunction@^3.0.9: 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.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 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" @@ -8860,12 +9819,12 @@ lodash.merge@^4.6.2: lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.template@^4.5.0: version "4.5.0" @@ -8882,17 +9841,12 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: +lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8902,7 +9856,7 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log-symbols@^4.0.0: +log-symbols@4.1.0, log-symbols@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -8920,14 +9874,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - -loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -8937,7 +9884,7 @@ loose-envify@^1.4.0: lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== lower-case@^2.0.2: version "2.0.2" @@ -8946,16 +9893,16 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@^4.1.2, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -8978,6 +9925,23 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.13.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + majestic@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/majestic/-/majestic-1.8.1.tgz#b9ee3d18371aa07e1ebd514221e23f1474945749" @@ -9009,32 +9973,32 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" + integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" + agentkeepalive "^4.2.1" + cacache "^16.1.0" http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" + http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" + lru-cache "^7.7.1" + minipass "^3.1.6" minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" + minipass-fetch "^2.0.3" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - negotiator "^0.6.2" + negotiator "^0.6.3" promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" makeerror@1.0.12: version "1.0.12" @@ -9053,12 +10017,12 @@ map-age-cleaner@^0.1.3: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -9071,6 +10035,15 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -9084,7 +10057,7 @@ mdn-data@2.0.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== mem@^8.1.1: version "8.1.1" @@ -9095,16 +10068,16 @@ mem@^8.1.1: mimic-fn "^3.1.0" memfs@^3.1.2, memfs@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.3.0.tgz#4da2d1fc40a04b170a56622c7164c6be2c4cbef2" - integrity sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg== + version "3.4.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== dependencies: - fs-monkey "1.0.3" + fs-monkey "^1.0.3" memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -9120,7 +10093,7 @@ memory-fs@^0.5.0: merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-source-map@^1.1.0: version "1.1.0" @@ -9134,7 +10107,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -9142,7 +10115,7 @@ merge2@^1.3.0: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -9163,13 +10136,13 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" miller-rabin@^4.0.0: version "4.0.1" @@ -9179,17 +10152,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.50.0, "mime-db@>= 1.43.0 < 2": - version "1.50.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" - integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.19, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.33" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" - integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== +mime-types@^2.1.12, mime-types@^2.1.19, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.50.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -9211,7 +10184,12 @@ mimic-fn@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== @@ -9221,6 +10199,11 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -9229,19 +10212,33 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@4.2.1: + 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" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, 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== +minimatch@^3.0.4, minimatch@^3.1.1: + 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.1, minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, 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== minipass-collect@^1.0.2: version "1.0.2" @@ -9250,16 +10247,16 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== +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== dependencies: - minipass "^3.1.0" + minipass "^3.1.6" minipass-sized "^1.0.3" - minizlib "^2.0.0" + minizlib "^2.1.2" optionalDependencies: - encoding "^0.1.12" + encoding "^0.1.13" minipass-flush@^1.0.5: version "1.0.5" @@ -9290,14 +10287,14 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" - integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== dependencies: yallist "^4.0.0" -minizlib@^2.0.0, minizlib@^2.1.1: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -9329,7 +10326,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-classic@^0.5.2: +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== @@ -9340,54 +10337,83 @@ mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@^9.2.0: + 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" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" -mochawesome-merge@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mochawesome-merge/-/mochawesome-merge-4.2.0.tgz#970ea141165039bfdd6772b1232a1ef6ba99af1a" - integrity sha512-FSMzagh+8hTShhFXdBLE4/zS2WALcDruoD0bmtiwHEjfyQszR/iEGFTgbuM5ewA5At3qeSGwGsT0k2Stt64NdQ== +mochawesome-merge@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/mochawesome-merge/-/mochawesome-merge-4.2.1.tgz#484e5c500dd5d88b33adb440e6dfef80d9109a18" + integrity sha512-G7+LqIKgixShKG4FyWDn1PIrzpKEwCofrJip/VzdqghNGqZl4S5MNoXx5YDfk9KLe+pr4qGa1TOzCc/oVw/8Kw== dependencies: fs-extra "^7.0.1" glob "^7.1.6" - uuid "^3.3.2" yargs "^15.3.1" -mochawesome-report-generator@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-5.2.0.tgz#ffd29f8d610863e48e63c15c4e83b5689d8dbd04" - integrity sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg== +mochawesome-report-generator@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz#65a30a11235ba7a68e1cf0ca1df80d764b93ae78" + integrity sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg== dependencies: - chalk "^2.4.2" - dateformat "^3.0.2" + chalk "^4.1.2" + dateformat "^4.5.1" escape-html "^1.0.3" - fs-extra "^7.0.0" - fsu "^1.0.2" - lodash.isfunction "^3.0.8" + fs-extra "^10.0.0" + fsu "^1.1.1" + lodash.isfunction "^3.0.9" opener "^1.5.2" prop-types "^15.7.2" tcomb "^3.2.17" tcomb-validation "^3.3.0" - validator "^10.11.0" - yargs "^13.2.2" + validator "^13.6.0" + yargs "^17.2.1" -mochawesome@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-6.3.1.tgz#9dc1e73165f4686a6f29c382d36b8cf3cd6a6e9c" - integrity sha512-G2J7Le8ap+0222otJQEUVFs7RYzphiIk21NzaBZE2dbyHJ2+9aai+V2cV7lreEKigDpwQ+SXeiiBH9KQlrkaAQ== +mochawesome@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-7.1.3.tgz#07b358138f37f5b07b51a1b255d84babfa36fa83" + integrity sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ== dependencies: - chalk "^4.1.0" + chalk "^4.1.2" diff "^5.0.0" json-stringify-safe "^5.0.1" lodash.isempty "^4.4.0" lodash.isfunction "^3.0.9" lodash.isobject "^3.0.2" lodash.isstring "^4.0.1" - mochawesome-report-generator "^5.2.0" - strip-ansi "^6.0.0" + mochawesome-report-generator "^6.2.0" + strip-ansi "^6.0.1" uuid "^8.3.2" module-deps@^6.2.3: @@ -9414,24 +10440,12 @@ module-deps@^6.2.3: module-details-from-path@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= - -moment-timezone@^0.5.x: - version "0.5.33" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0": - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -9440,22 +10454,22 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -9471,14 +10485,19 @@ mute-stream@0.0.8, mute-stream@~0.0.4: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== -nanoid@^3.1.23: - version "3.1.30" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" - integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +nanoid@^3.1.23, nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== nanomatch@^1.2.9: version "1.2.13" @@ -9497,10 +10516,15 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== needle@2.4.0: version "2.4.0" @@ -9511,17 +10535,17 @@ needle@2.4.0: iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.2, negotiator@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -netmask@^2.0.1: +netmask@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== @@ -9541,27 +10565,62 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.3.0, node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== +node-abi@^3.3.0: + version "3.24.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.24.0.tgz#b9d03393a49f2c7e147d0c99f180e680c27c1599" + integrity sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw== + dependencies: + semver "^7.3.5" + +node-addon-api@^1.7.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + +node-addon-api@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" + integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== + +node-cache@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.1.tgz#efd8474dee4edec4138cdded580f5516500f7334" + integrity sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A== + dependencies: + clone "2.x" + lodash "^4.17.15" + +node-fetch-native@^0.1.3, node-fetch-native@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-0.1.4.tgz#09b06754f9e298bac23848050da2352125634f89" + integrity sha512-10EKpOCQPXwZVFh3U1ptOMWBgKTbsN7Vvo6WVKt5pw4hp8zbv6ZVBZPlXw+5M6Tyi1oc1iD4/sNPd71KYA16tQ== + +node-fetch@^2.1.2, node-fetch@^2.3.0, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp@^9.0.0: + 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" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" + npmlog "^6.0.0" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" node-html-parser@^3.2.0: @@ -9575,7 +10634,7 @@ node-html-parser@^3.2.0: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-libs-browser@^2.2.1: version "2.2.1" @@ -9606,20 +10665,15 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - node-object-hash@^1.2.0: version "1.4.2" resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" integrity sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ== -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +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" @@ -9637,7 +10691,14 @@ nopt@^5.0.0: resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: - abbrev "1" + 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.3.2: version "2.5.0" @@ -9649,10 +10710,20 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" 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== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" @@ -9664,12 +10735,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ== dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -9681,65 +10752,60 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - normalize-url@^6.0.1, normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== nouislider@^15.2.0: - version "15.5.0" - resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-15.5.0.tgz#2adc143de400e3ae191ca291f0df24c519a15b5b" - integrity sha512-p0Rn0a4XzrBJ+JZRhNDYpRYr6sDPkajsjbvEQoTp/AZlNI3NirO15s1t11D25Gk3zVyvNJAzc1DO48cq/KX5Sw== + version "15.6.0" + resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-15.6.0.tgz#706b37b8cd485037353dcdb8bb387f9d2704c37c" + integrity sha512-YJg+A6RQXTuFqhEwd42FeRaEGMGgDSSNnpIyVtT8XJrNl4VBEUkPI6Yj91bT3JjJIvNYi4VdppWeCV+z2gOnnw== -npm-bundled@^1.1.1: +npm-bundled@^1.1.1, npm-bundled@^1.1.2: 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-check-updates@^11.8.5: - version "11.8.5" - resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-11.8.5.tgz#8dec7fd255a437264742c15f9c0bb29f4eceaf55" - integrity sha512-IYSHjlWe8UEugDy7X0qjBeJwcni4DlcWdBK4QQEbwgkNlEDlXyd4yQJYWFumKaJzrp/n5/EcvaboXsBD1Er/pw== +npm-check-updates@^15.0.4: + 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" - cli-table "^0.3.6" - commander "^6.2.1" + chalk "^5.0.1" + cli-table "^0.3.11" + commander "^9.3.0" fast-memoize "^2.5.2" find-up "5.0.0" fp-and-or "^0.1.3" get-stdin "^8.0.0" globby "^11.0.4" - hosted-git-info "^4.0.2" + hosted-git-info "^5.0.0" json-parse-helpfulerror "^1.0.3" jsonlines "^0.1.1" - libnpmconfig "^1.2.1" lodash "^4.17.21" - minimatch "^3.0.4" + minimatch "^5.1.0" p-map "^4.0.0" - pacote "^11.3.5" + pacote "^13.6.1" parse-github-url "^1.0.2" progress "^2.0.3" - prompts "^2.4.1" - rc-config-loader "^4.0.0" + prompts-ncu "^2.5.1" + rc-config-loader "^4.1.0" remote-git-tags "^3.0.0" rimraf "^3.0.2" - semver "^7.3.5" + semver "^7.3.7" semver-utils "^1.1.4" + source-map-support "^0.5.21" spawn-please "^1.0.0" - update-notifier "^5.1.0" + update-notifier "^6.0.2" + yaml "^2.1.1" -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== dependencies: semver "^7.1.1" @@ -9748,46 +10814,48 @@ 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-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" -npm-packlist@^2.1.4: - version "2.2.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" - integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== +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== dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" - integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== +npm-pick-manifest@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" + integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== dependencies: - npm-install-checks "^4.0.0" + npm-install-checks "^5.0.0" npm-normalize-package-bin "^1.0.1" - npm-package-arg "^8.1.2" - semver "^7.3.4" + npm-package-arg "^9.0.0" + semver "^7.3.5" -npm-registry-fetch@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" - integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== +npm-registry-fetch@^13.0.1: + version "13.3.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz#0ce10fa4a699a1e70685ecf41bbfb4150d74231b" + integrity sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg== dependencies: - make-fetch-happen "^9.0.1" - minipass "^3.1.3" - minipass-fetch "^1.3.0" + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" @@ -9796,20 +10864,27 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" nssocket@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" - integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo= + integrity sha512-a9GSOIql5IqgWJR3F/JXG4KpJTA3Z53Cj0MeMvGpglytB1nxE4PdFNC0jINe27CS7cGivoynwc054EzCcT3M3w== dependencies: eventemitter2 "~0.4.14" lazy "~1.0.11" @@ -9821,22 +10896,17 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -nth-check@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== nuxt-i18n@^6.28.0: version "6.28.1" @@ -9889,35 +10959,30 @@ nuxt@^2.15.8: "@nuxt/webpack" "2.15.8" nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" + integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -9925,33 +10990,34 @@ object-keys@^1.0.12, object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + version "4.1.3" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + version "2.1.4" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== dependencies: + array.prototype.reduce "^1.0.4" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" @@ -9964,18 +11030,35 @@ object.values@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +ohmyfetch@^0.4.18: + version "0.4.18" + resolved "https://registry.yarnpkg.com/ohmyfetch/-/ohmyfetch-0.4.18.tgz#2952e04bd52662d0618d3d2f344db0250c3eeac2" + integrity sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ== + dependencies: + destr "^1.1.1" + node-fetch-native "^0.1.3" + ufo "^0.8.4" + undici "^5.2.0" + omit-deep@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/omit-deep/-/omit-deep-0.3.0.tgz#21c8af3499bcadd29651a232cbcacbc52445ebec" - integrity sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w= + integrity sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg== dependencies: is-plain-object "^2.0.1" unset-value "^0.1.1" -on-finished@^2.3.0, on-finished@~2.3.0: +on-finished@2.4.1, on-finished@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" @@ -9987,7 +11070,7 @@ on-headers@^1.0.2, on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -9998,6 +11081,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -10010,13 +11100,6 @@ opener@1.5.2, opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optimism@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.10.3.tgz#163268fdc741dea2fb50f300bedda80356445fd7" - integrity sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw== - dependencies: - "@wry/context" "^0.4.0" - optimism@^0.16.1: version "0.16.1" resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d" @@ -10048,39 +11131,34 @@ optionator@^0.8.1: os-browserify@^0.3.0, os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== 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" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" @@ -10089,7 +11167,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -10117,6 +11195,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -10145,53 +11228,55 @@ pac-proxy-agent@^5.0.0: socks-proxy-agent "5" pac-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.0.tgz#1d717a127b3d7a9407a16d6e1b012b13b9ba8dc0" - integrity sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" + integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== dependencies: - degenerator "^3.0.1" + degenerator "^3.0.2" ip "^1.1.5" - netmask "^2.0.1" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pacote@^11.3.5: - version "11.3.5" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" - integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^1.8.2" - cacache "^15.0.5" + netmask "^2.0.2" + +package-json@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850" + integrity sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg== + dependencies: + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" + +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== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" chownr "^2.0.0" fs-minipass "^2.1.0" infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^2.1.4" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" + ssri "^9.0.0" + tar "^6.1.11" pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== pako@~1.0.5: version "1.0.11" @@ -10210,7 +11295,7 @@ parallel-transform@^1.1.0: param-case@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== dependencies: no-case "^2.2.0" @@ -10232,7 +11317,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" @@ -10263,12 +11348,12 @@ parse-github-url@^1.0.2: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -10279,9 +11364,9 @@ parse-json@^5.0.0: lines-and-columns "^1.1.6" parse-path@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" - integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" + integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" @@ -10289,9 +11374,9 @@ parse-path@^4.0.0: query-string "^6.13.8" parse-url@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" - integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== + version "6.0.5" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.5.tgz#4acab8982cef1846a0f8675fa686cef24b2f6f9b" + integrity sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA== dependencies: is-ssh "^1.3.0" normalize-url "^6.1.0" @@ -10303,6 +11388,13 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -10319,7 +11411,7 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.1, path-browserify@~0.0.0: version "0.0.1" @@ -10334,12 +11426,12 @@ path-browserify@^1.0.0: path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -10349,14 +11441,19 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -10364,12 +11461,12 @@ path-parse@^1.0.6: 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-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^3.0.0: version "3.0.0" @@ -10383,6 +11480,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.4.tgz#35bfb1e92373f98d9711cc74e7d6475a0654deae" + integrity sha512-YWgqEdxf36R6vcsyj0A+yT/rDRPe0wui4J9gRR7T4whjU5Lx/jZOr75ckEgTNaLVQABAwsrlzHRpIKcCdXAQ5A== + pbkdf2@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" @@ -10397,12 +11499,12 @@ pbkdf2@^3.0.3: pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^0.2.1: version "0.2.1" @@ -10414,27 +11516,39 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== -pidusage@2.0.21, pidusage@^2.0.21: +pidusage@^2.0.21: version "2.0.21" resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA== dependencies: safe-buffer "^5.2.1" +pidusage@~3.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-3.0.0.tgz#69108079724c9afdd958644b920bc40bac964044" + integrity sha512-8VJLToXhj+RYZGNVw8oxc7dS54iCQXUJ+MDFHezQ/fwF5B8W4OWodAMboc1wb08S/4LiHwAmkT4ohf/d3YPPsw== + dependencies: + safe-buffer "^5.2.1" + pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" @@ -10446,12 +11560,18 @@ pify@^5.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== +pinia@^2.0.14: + version "2.0.18" + resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.18.tgz#b29ed34bcb4c032b7da7c24c10db18b88d9254d8" + integrity sha512-I5MW05UVX6a5Djka136oH3VzYFiZUgeOApBwFjMx6pL91eHtGVlE3adjNUKLgtwGnrxiBRuJ8+4R3LKJKwnyZg== dependencies: - node-modules-regexp "^1.0.0" + "@vue/devtools-api" "^6.2.1" + vue-demi "*" + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -10467,13 +11587,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - pm2-axon-rpc@~0.7.0, pm2-axon-rpc@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a" @@ -10502,7 +11615,7 @@ pm2-deploy@~1.0.2: pm2-multimeter@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" - integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4= + integrity sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA== dependencies: charm "~0.1.1" @@ -10517,10 +11630,10 @@ pm2-sysmonit@^1.2.8: systeminformation "^5.7" tx2 "~1.0.4" -pm2@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/pm2/-/pm2-5.1.2.tgz#bffe4e9a84ee013362717eaad1b39b4d73f0fcd0" - integrity sha512-2nJQeCWjkN0WnTkWctaoZpqrJTiUN/Icw76IMVHHzPhr/p7yQYlEQgHzlL5IFWxO2N1HdBNXNdZft2p4HUmUcA== +pm2@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/pm2/-/pm2-5.2.0.tgz#fda71fab4b8fcfa5b7f546ca55a6e59e9ec5a68d" + integrity sha512-PO5hMVhQ85cTszFM++6v07Me9hPJMkFbHjkFigtMMk+La8ty2wCi2dlBTeZYJDhPUSjK8Ccltpq2buNRcyMOTw== dependencies: "@pm2/agent" "~2.0.0" "@pm2/io" "~5.0.0" @@ -10532,7 +11645,7 @@ pm2@^5.1.2: chokidar "^3.5.1" cli-tableau "^2.0.0" commander "2.15.1" - cron "1.8.2" + croner "~4.1.92" dayjs "~1.8.25" debug "^4.3.1" enquirer "2.3.6" @@ -10540,7 +11653,7 @@ pm2@^5.1.2: fclone "1.0.11" mkdirp "1.0.4" needle "2.4.0" - pidusage "2.0.21" + pidusage "~3.0" pm2-axon "~4.0.1" pm2-axon-rpc "~0.7.1" pm2-deploy "~1.0.2" @@ -10564,7 +11677,7 @@ pnp-webpack-plugin@^1.6.4: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-attribute-case-insensitive@^4.0.1: version "4.0.2" @@ -11035,9 +12148,9 @@ postcss-place@^4.0.1: postcss-values-parser "^2.0.0" postcss-preset-env@^6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + version "6.7.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.1.tgz#26563d2e9395d626a45a836450844540694bfcef" + integrity sha512-rlRkgX9t0v2On33n7TK8pnkcYOATGQSv48J2RS8GsXhqtg+xk6AummHP88Y5mJo0TLJelBjePvSjScTNkj3+qw== dependencies: autoprefixer "^9.6.1" browserslist "^4.6.4" @@ -11147,9 +12260,9 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -11189,9 +12302,9 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" @@ -11219,25 +12332,47 @@ postcss@7.x.x, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.4.14: + version "8.4.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== "prettier@^1.18.2 || ^2.0.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== pretty-bytes@^5.6.0: version "5.6.0" @@ -11252,16 +12387,35 @@ pretty-error@^2.1.1: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" - integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - "@jest/types" "^27.2.5" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" +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.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" @@ -11270,12 +12424,17 @@ 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" js-beautify "^1.6.12" +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -11284,7 +12443,7 @@ process-nextick-args@~2.0.0: process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@^2.0.3: version "2.0.3" @@ -11294,7 +12453,7 @@ progress@^2.0.3: promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" @@ -11307,11 +12466,19 @@ promise-retry@^2.0.1: promptly@^2: version "2.2.0" resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" - integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ= + integrity sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA== dependencies: read "^1.0.4" -prompts@^2.0.1, prompts@^2.4.1: +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" + +prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -11320,13 +12487,13 @@ prompts@^2.0.1, prompts@^2.4.1: sisteransi "^1.0.5" prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" proper-lockfile@^4.1.2: version "4.1.2" @@ -11340,14 +12507,19 @@ proper-lockfile@^4.1.2: proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -protocols@^1.1.0, protocols@^1.4.0: +protocols@^1.4.0: version "1.4.8" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== -proxy-addr@~2.0.5: +protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -11372,7 +12544,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" @@ -11382,17 +12554,17 @@ proxy-from-env@^1.0.0: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -11434,24 +12606,24 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.2.4, punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== +pupa@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" + integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== dependencies: - escape-goat "^2.0.0" + escape-goat "^4.0.0" purgecss-webpack-plugin@^2.0.5: version "2.3.0" @@ -11475,29 +12647,31 @@ purgecss@^2.0.5, purgecss@^2.3.0: q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" qs@^6.9.4: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -11515,17 +12689,12 @@ query-string@^6.13.8: querystring-es3@^0.2.0, querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== queue-microtask@^1.2.2: version "1.2.3" @@ -11537,11 +12706,6 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -ramda@~0.27.1: - version "0.27.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" - integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -11562,46 +12726,36 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-body@2.5.1, raw-body@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -rc-config-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-4.0.0.tgz#144cf31961c9f8ebcf252bd9c263fd40d62bd387" - integrity sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw== +rc-config-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-4.1.0.tgz#208e797d773a2203473df10496cd75b5fd93740e" + integrity sha512-aW+kX4qy0CiM9L4fG4Us3oEOpIrOrXzWykAn+xldD07Y9PXWjTH744oHbv0Kc9ZwWaylw3jMjxaf14RgStrNrA== dependencies: debug "^4.1.1" js-yaml "^4.0.0" json5 "^2.1.2" require-from-string "^2.0.2" -rc9@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rc9/-/rc9-1.2.0.tgz#ef098181fdde714efc4c426383d6e46c14b1254a" - integrity sha512-/jknmhG0USFAx5uoKkAKhtG40sONds9RWhFHrP1UzJ3OvVfqFWOypSUpmsQD0fFwAV7YtzHhsn3QNasfAoxgcQ== +rc9@^1.2.0, rc9@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-1.2.2.tgz#0d79202e088dd80e2e0f77ac36f520247d2d3964" + integrity sha512-zbe8+HR2X28eZepAwohuKkebbEsA67h0DO9I7g12QrHa2CQopR9gztOLPIPXXGTvcxeUjAN4wZ+b29t3m/u05g== dependencies: - defu "^2.0.4" - destr "^1.0.0" + defu "^6.0.0" + destr "^1.1.1" flat "^5.0.0" -rc@^1.2.8: +rc@1.2.8, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -11611,7 +12765,7 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -11621,21 +12775,26 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.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" -read-package-json-fast@^2.0.1: +read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -11643,6 +12802,16 @@ read-package-json-fast@^2.0.1: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" +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== + 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" + read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -11654,7 +12823,7 @@ read-pkg-up@^4.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -11663,11 +12832,11 @@ read-pkg@^3.0.0: read@^1.0.4: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -11683,14 +12852,14 @@ read@^1.0.4: readable-stream@1.1.x: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@3, readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11715,10 +12884,42 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redis-commands@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" + integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +redis-tag-cache@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/redis-tag-cache/-/redis-tag-cache-1.2.1.tgz#07d6e1f945d9d5c8186602129cb10573167d7534" + integrity sha512-0F+rLtoIkz4NOWGt9k3qaPcbpvr6+wcEC9aWV78newMKTRN/nIYHgvfyO1Q0ySEepiEYbqj9DhjvQ4CUAtT9/g== + dependencies: + ioredis "^4.0.0" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: regenerate "^1.4.2" @@ -11727,15 +12928,20 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +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" @@ -11747,48 +12953,57 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== +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" + +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 "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" + 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" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== +registry-auth-token@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" + integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== dependencies: - rc "^1.2.8" + "@pnpm/npm-conf" "^1.0.4" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: - rc "^1.2.8" + rc "1.2.8" -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remote-git-tags@^3.0.0: version "3.0.0" @@ -11798,7 +13013,7 @@ remote-git-tags@^3.0.0: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== renderkid@^2.0.4: version "2.0.7" @@ -11819,45 +13034,19 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== 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" -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -11878,7 +13067,12 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -resolve-alpn@^1.0.0: +requrl@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/requrl/-/requrl-3.0.2.tgz#d376104193b02a2d874dde68454c2db2dfeb0fac" + integrity sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg== + +resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== @@ -11893,7 +13087,7 @@ resolve-cwd@^3.0.0: resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -11908,32 +13102,26 @@ resolve-from@^5.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^1.1.0: version "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.7, resolve@^1.10.0, 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.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= +resolve@^1.1.4, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.2.0, resolve@^1.20.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== dependencies: - lowercase-keys "^1.0.0" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^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" @@ -11953,22 +13141,27 @@ ret@~0.1.10: retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" @@ -11992,16 +13185,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -12017,7 +13200,7 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" @@ -12033,19 +13216,19 @@ rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" - integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== +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" + tslib "^2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -12053,7 +13236,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -12074,9 +13257,9 @@ sass-loader@10.1.1: semver "^7.3.2" sass-loader@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" - integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== + version "10.3.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.3.1.tgz#a45f0d1dd7ea90de7eb099239a18c83dea6e6341" + integrity sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -12085,21 +13268,23 @@ sass-loader@^10.0.3: semver "^7.3.2" sass-resources-loader@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.4.tgz#1a86fba499e74a88cb7ce95f0c98449f348d360e" - integrity sha512-hIQhBygYky+rLf+4cuoGYONZ623CEH4Swo1fs1WRJkukbqdvN1VIu2KCL59du6vX92bNELzNkGPLx+NorN73xA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz#75131cdb26bae51fcffc007d8155d57b5e825ca7" + integrity sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ== dependencies: - async "^3.2.0" + async "^3.2.3" chalk "^4.1.0" glob "^7.1.6" loader-utils "^2.0.0" sass@^1.32.13: - version "1.43.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.4.tgz#68c7d6a1b004bef49af0d9caf750e9b252105d1f" - integrity sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg== + version "1.54.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.4.tgz#803ff2fef5525f1dd01670c3915b4b68b6cba72d" + integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== dependencies: chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" sax@^1.2.4, sax@~1.2.4: version "1.2.4" @@ -12113,6 +13298,13 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + schema-utils@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" @@ -12131,7 +13323,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.1: +schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -12154,17 +13346,19 @@ scule@^0.2.1: resolved "https://registry.yarnpkg.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc" integrity sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg== -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: - semver "^6.3.0" + semver "^7.3.5" semver-utils@^1.1.4: version "1.1.4" @@ -12176,7 +13370,7 @@ semver-utils@^1.1.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -12186,10 +13380,10 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.1.1, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -12198,24 +13392,31 @@ semver@~7.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" integrity sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig== -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "2.0.0" mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" + ms "2.1.3" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "2.0.1" + +serialize-javascript@6.0.0, serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" serialize-javascript@^3.1.0: version "3.1.0" @@ -12245,25 +13446,25 @@ serve-placeholder@^1.2.3: dependencies: defu "^5.0.0" -serve-static@1.14.1, serve-static@^1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.15.0, serve-static@^1.14.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.18.0" server-destroy@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" - integrity sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0= + integrity sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -12278,12 +13479,12 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" @@ -12300,6 +13501,20 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +sharp@^0.30.7: + version "0.30.7" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" + integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.7" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + shasum-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" @@ -12310,7 +13525,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" @@ -12327,7 +13542,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.4.2, shell-quote@^1.6.1: +shell-quote@^1.4.2, shell-quote@^1.6.1, shell-quote@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== @@ -12349,52 +13564,41 @@ 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: - version "3.0.5" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" - integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" -simplebar-vue@^1.4.0: - version "1.6.8" - resolved "https://registry.yarnpkg.com/simplebar-vue/-/simplebar-vue-1.6.8.tgz#ba6d6dc0e61d07f5bcb84f4bd8e3187c39452ff2" - integrity sha512-rykHqyDxeylI3z2NOAsiD+rhcx+cfiOrfnIotDJFC8FqoO4jyJMEN8Q+61PTMOfVJA0oSWFZySlagCH6lG+5qQ== - dependencies: - core-js "^3.0.1" - simplebar "^5.3.6" - -simplebar@^5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-5.3.6.tgz#d9383576a09a6fd09e19543f8e9906a3e87c3896" - integrity sha512-FJUMbV+hNDd/m+1/fvD41TXKd5mSdlI5zgBygkaQIV3SffNbcLhSbJT6ufTs8ZNRLJ6i+qc/KCFMqWmvlGWMhA== - dependencies: - "@juggle/resize-observer" "^3.3.1" - can-use-dom "^0.1.0" - core-js "^3.0.1" - lodash.debounce "^4.0.8" - lodash.memoize "^4.1.2" - lodash.throttle "^4.1.1" - sirv@^1.0.7: - version "1.0.18" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.18.tgz#105fab52fb656ce8a2bebbf36b11052005952899" - integrity sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA== + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== dependencies: "@polka/url" "^1.0.0-next.20" - mime "^2.3.1" + mrmime "^1.0.0" totalist "^1.0.0" sisteransi@^1.0.5: @@ -12430,7 +13634,15 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -smart-buffer@^4.1.0: +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== @@ -12474,34 +13686,34 @@ socks-proxy-agent@5, socks-proxy-agent@^5.0.0: debug "4" socks "^2.3.3" -socks-proxy-agent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" - integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg== +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" - debug "^4.3.1" - socks "^2.6.1" + debug "^4.3.3" + socks "^2.6.2" -socks@^2.3.3, socks@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" - integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== +socks@^2.3.3, 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 "^1.1.5" - smart-buffer "^4.1.0" + 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" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" @@ -12510,6 +13722,11 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -12529,10 +13746,10 @@ source-map-support@0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== +source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -12545,22 +13762,27 @@ source-map-url@^0.4.0: source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spawn-please@^1.0.0: version "1.0.0" @@ -12589,9 +13811,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== split-on-first@^1.0.0: version "1.1.0" @@ -12613,12 +13835,12 @@ sprintf-js@1.1.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -12637,13 +13859,20 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.0, ssri@^8.0.1: +ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -12652,14 +13881,7 @@ stable@^0.1.8: stack-trace@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stack-utils@^2.0.3: version "2.0.5" @@ -12668,23 +13890,33 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^1.1.0: version "1.3.1" @@ -12719,7 +13951,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" @@ -12769,14 +14001,14 @@ stream-splicer@^2.0.0: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -string-argv@0.3.1: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -12797,15 +14029,6 @@ string-length@^5.0.1: char-regex "^2.0.0" strip-ansi "^7.0.1" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -12815,30 +14038,32 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +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.3" + 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" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +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.3" + define-properties "^1.1.4" + es-abstract "^1.19.5" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -12850,7 +14075,7 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -12859,29 +14084,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -12899,7 +14108,7 @@ strip-ansi@^7.0.1: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -12911,19 +14120,37 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@~2.0.1: +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-resources-loader@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/style-resources-loader/-/style-resources-loader-1.4.1.tgz#87f520e6c8120a71e756726c1c53a78c544ca7db" - integrity sha512-UaAoQXq20relw6B633z4QZDxDyW7gevTt1e0y3MZtzdZfnvB90UL658czAgNc609Y7Kn5ErdthK9bSVhnykBUA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/style-resources-loader/-/style-resources-loader-1.5.0.tgz#6e0585ca475b9dac45387c308be90d74c814f41f" + integrity sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw== dependencies: - glob "^7.1.6" + glob "^7.2.0" loader-utils "^2.0.0" - schema-utils "^3.0.0" + schema-utils "^2.7.0" + tslib "^2.3.1" stylehacks@^4.0.0: version "4.0.3" @@ -12937,7 +14164,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" @@ -12951,7 +14178,7 @@ supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0: version "5.5.0" @@ -12982,10 +14209,15 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== svgo@^1.0.0: version "1.3.2" @@ -13006,11 +14238,6 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-observable@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - symbol-observable@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" @@ -13029,16 +14256,37 @@ syntax-error@^1.1.1: acorn-node "^1.2.0" systeminformation@^5.7: - version "5.9.9" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.9.9.tgz#aa8234a138363bd988f438fed3273370f79d7e30" - integrity sha512-xciy6NKCLfs4dqMD1Tdlo7v1/g0NfdA1EKsIptUQjlcVvpwHyjifAbNOF7ppFezGSMXxYE8me+l2+RlFF4lyTg== + version "5.12.5" + resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.12.5.tgz#ba223aca6d99453136986fb6a4c96518d13d27b5" + integrity sha512-lWhWMZTQzwHaB2aacQ9wbhSncgXo8bYv7M9K5Qrz9tJuvqPepiCvb5Uauq2xwH+JhbjPO9YJD2qLXQEXFAjwwA== tapable@^1.0.0, tapable@^1.0.0-beta.5, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^6.0.2, tar@^6.1.0: +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -13101,21 +14349,22 @@ terser-webpack-plugin@^4.2.3: webpack-sources "^1.4.3" terser@^4.1.2, terser@^4.6.13, 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== + 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.0.0, terser@^5.3.4: - version "5.9.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" - integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== +terser@^5.3.4: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" test-exclude@^6.0.0: @@ -13130,7 +14379,7 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thread-loader@^3.0.4: version "3.0.4" @@ -13151,7 +14400,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" @@ -13171,7 +14420,7 @@ through2@^4.0.2: "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== time-fix-plugin@^2.0.7: version "2.0.7" @@ -13181,7 +14430,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" @@ -13195,7 +14444,7 @@ timers-browserify@^2.0.4: timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== tmp@^0.0.33: version "0.0.33" @@ -13219,29 +14468,29 @@ tmpl@1.0.5: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== + +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 sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -13263,10 +14512,10 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== totalist@^1.0.0: version "1.1.0" @@ -13297,43 +14546,43 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -ts-invariant@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" - integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== - dependencies: - tslib "^1.9.3" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-invariant@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.9.3.tgz#4b41e0a80c2530a56ce4b8fd4e14183aaac0efa8" - integrity sha512-HinBlTbFslQI0OHP07JLsSXPibSegec6r9ai5xxq/qHYCsIQbzpymLpDhAUsnXcSrDEcd0L62L8vsOEdzM0qlA== +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== dependencies: tslib "^2.1.0" -ts-jest@^27.0.7: - version "27.0.7" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.7.tgz#fb7c8c8cb5526ab371bc1b23d06e745652cca2d0" - integrity sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q== +ts-jest@^28.0.5: + version "28.0.7" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.7.tgz#e18757a9e44693da9980a79127e5df5a98b37ac6" + integrity sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" + jest-util "^28.0.0" + json5 "^2.2.1" lodash.memoize "4.x" make-error "1.x" semver "7.x" - yargs-parser "20.x" + yargs-parser "^21.0.1" ts-loader@^8.0.17, ts-loader@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" - integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== + 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" @@ -13341,35 +14590,59 @@ ts-loader@^8.0.17, ts-loader@^8.1.0: micromatch "^4.0.0" semver "^7.3.4" +ts-node@^10.8.2: + 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" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + tslib@1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== tty-browserify@0.0.1: version "0.0.1" @@ -13379,31 +14652,31 @@ tty-browserify@0.0.1: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tv4@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" - integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= + integrity sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw== tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== tx2@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tx2/-/tx2-1.0.4.tgz#cb9432df22e0b8c54daf711b51b708f094449ddf" - integrity sha512-rU+y30nUY3PyIi+znvv74HzxlpULKwMPAyRK+YiCjvGkk3rY3fic3D6Z+avLpun3V5A6HFwPQ9JrBTMNEV/dxg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/tx2/-/tx2-1.0.5.tgz#ee0b0e5e2c351f8d23e54bdf46dd60afa3bbc73d" + integrity sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg== dependencies: json-stringify-safe "^5.0.1" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -13427,7 +14700,17 @@ type-fest@^0.8.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: +type-fest@^1.0.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-fest@^2.13.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.18.0.tgz#fdef3a74e0a9e68ebe46054836650fb91ac3881e" + integrity sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw== + +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -13445,12 +14728,12 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== typescript@~4.2: version "4.2.4" @@ -13462,29 +14745,34 @@ ua-parser-js@^0.7.28: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== -ufo@^0.7.4, ufo@^0.7.7: - version "0.7.9" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.9.tgz#0268e3734b413c9ed6f3510201f42372821b875c" - integrity sha512-6t9LrLk3FhqTS+GW3IqlITtfRB5JAVr5MMNjpBECfK827W+Vh5Ilw/LhTcHWrt6b3hkeBvcbjx4Ti7QVFzmcww== +ufo@^0.7.4, ufo@^0.7.7, ufo@^0.7.9: + version "0.7.11" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.11.tgz#17defad497981290383c5d26357773431fdbadcb" + integrity sha512-IT3q0lPvtkqQ8toHQN/BkOi4VIqoqheqM1FnkNWT9y0G8B3xJhwnoKBu5OHx8zHDOvveQzfKuFowJ0VSARiIDg== + +ufo@^0.8.4, ufo@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.5.tgz#e367b4205ece9d9723f2fa54f887d43ed1bce5d0" + integrity sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA== uglify-js@^3.5.1: - version "3.14.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" - integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== + version "3.16.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.3.tgz#94c7a63337ee31227a18d03b8a3041c210fd1f1d" + integrity sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw== umd@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +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: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" undeclared-identifiers@^1.1.2: @@ -13498,6 +14786,11 @@ undeclared-identifiers@^1.1.2: simple-concat "^1.0.0" xtend "^4.0.1" +undici@^5.2.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.8.2.tgz#071fc8a6a5d24db0ad510ad442f607d9b09d5eec" + integrity sha512-3KLq3pXMS0Y4IELV045fTxqz04Nk9Ms7yfBBHum3yxsTR4XNn+ZCaUbf/mWitgYDAhsplQ0B1G4S5D345lMO3A== + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -13539,12 +14832,12 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== unique-filename@^1.1.1: version "1.1.1" @@ -13560,12 +14853,12 @@ unique-slug@^2.0.0: 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" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: - crypto-random-string "^2.0.0" + crypto-random-string "^4.0.0" universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" @@ -13580,17 +14873,63 @@ universalify@^2.0.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unplugin-vue2-script-setup@^0.6.11: + version "0.6.17" + resolved "https://registry.yarnpkg.com/unplugin-vue2-script-setup/-/unplugin-vue2-script-setup-0.6.17.tgz#0c4eb0341d1192d219a6d9be51762586d6773d38" + integrity sha512-8B5UyVKH1ZatMQ8ENDueOMSzPYA82JbCMZkiwTxS1AFilzN6mKiwOFQRGNuSqoeMGpNqHpmDEw/mUSKWLzF1EQ== + dependencies: + "@antfu/utils" "^0.3.0" + "@babel/core" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + "@rollup/pluginutils" "^4.1.1" + "@vue/ref-transform" "^3.2.21" + "@vue/shared" "^3.2.21" + defu "^5.0.0" + htmlparser2 "5.0.1" + magic-string "^0.25.7" + unplugin "^0.2.21" + +unplugin-vue2-script-setup@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/unplugin-vue2-script-setup/-/unplugin-vue2-script-setup-0.7.3.tgz#edf63f7f183d8f50d2991d12f120f78faeb78a5a" + integrity sha512-3C32JkCS7BsNsgUkVnCEIJynHy+N/xwqiaUiMkeTm3Rk+HfHMhEPQ5Gysg3tejWY7KJyk8CohUKswTChurI1ng== + dependencies: + "@antfu/utils" "^0.3.0" + "@babel/core" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + "@rollup/pluginutils" "^4.1.1" + "@vue/compiler-core" "^3.2.23" + "@vue/ref-transform" "^3.2.23" + "@vue/shared" "^3.2.23" + defu "^5.0.0" + htmlparser2 "5.0.1" + magic-string "^0.25.7" + unplugin "^0.2.21" + +unplugin@^0.2.21: + version "0.2.21" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.2.21.tgz#7852cddd9f78f0b32881812fd2efd5a39dcc64e5" + integrity sha512-IJ15/L5XbhnV7J09Zjk0FT5HEkBjkXucWAXQWRsmEtUxmmxwh23yavrmDbCF6ZPxWiVB28+wnKIHePTRRpQPbQ== + dependencies: + webpack-virtual-modules "^0.4.3" unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== unset-value@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" - integrity sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA= + integrity sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -13598,7 +14937,7 @@ unset-value@^0.1.1: unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -13618,30 +14957,38 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== +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: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" + integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== + dependencies: + boxen "^7.0.0" + chalk "^5.0.1" + configstore "^6.0.0" + has-yarn "^3.0.0" + import-lazy "^4.0.0" + is-ci "^3.0.1" is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" + is-npm "^6.0.0" + is-yarn-global "^0.4.0" + latest-version "^7.0.0" + pupa "^3.1.0" + semver "^7.3.7" + semver-diff "^4.0.0" + xdg-basedir "^5.1.0" upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== uri-js@^4.2.2: version "4.4.1" @@ -13653,7 +15000,7 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-loader@^4.1.1: version "4.1.1" @@ -13664,17 +15011,10 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" querystring "0.2.0" @@ -13687,7 +15027,7 @@ use@^3.1.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@1.0.0: version "1.0.0" @@ -13710,7 +15050,7 @@ util.promisify@~1.0.0: util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" @@ -13743,14 +15083,14 @@ util@~0.12.0: utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.2.1, uuid@^3.3.2: +uuid@^3.2.1: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -13760,16 +15100,21 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-to-istanbul@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c" - integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -13777,17 +15122,12 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== dependencies: - builtins "^1.0.3" - -validator@^10.11.0: - version "10.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" - integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + builtins "^5.0.0" validator@^13.6.0: version "13.7.0" @@ -13797,12 +15137,12 @@ validator@^13.6.0: vary@^1, vary@^1.1.2, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vee-validate@^3.4.13: - version "3.4.13" - resolved "https://registry.yarnpkg.com/vee-validate/-/vee-validate-3.4.13.tgz#886ffe90778edde9c2f0c3ad94bfab3fe8079f31" - integrity sha512-ONnyRixpd0/JOGLuN8dlxFwLoT5FGq5ti1w4rx/zFZWaJZ1EefhfAbXkQvLwLhjU6izkfHyITXojW/7InOU3Tw== +vee-validate@^3.4.14: + version "3.4.14" + resolved "https://registry.yarnpkg.com/vee-validate/-/vee-validate-3.4.14.tgz#51f91c01d6660c43c6252c417c89fb07cdf8b8dd" + integrity sha512-Hqqic8G9WcRSIzCxiCPqMZv4qB8JE1lIQqIOLDm2K5BXUiL8d4a2+kqkanv8gQSGDzYpnCQZ7BO/T99Aj05T1Q== vendors@^1.0.0: version "1.0.4" @@ -13812,7 +15152,7 @@ vendors@^1.0.0: verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -13833,27 +15173,28 @@ vm-browserify@^1.0.0, vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vm2@^3.9.3: - version "3.9.5" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.5.tgz#5288044860b4bbace443101fcd3bddb2a0aa2496" - integrity sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng== +vm2@^3.9.8: + version "3.9.10" + resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.10.tgz#c66543096b5c44c8861a6465805c23c7cc996a44" + integrity sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ== + dependencies: + acorn "^8.7.0" + acorn-walk "^8.2.0" vue-client-only@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/vue-client-only/-/vue-client-only-2.1.0.tgz#1a67a47b8ecacfa86d75830173fffee3bf8a4ee3" integrity sha512-vKl1skEKn8EK9f8P2ZzhRnuaRHLHrlt1sbRmazlvsx6EiC3A8oWF8YCBrMJzoN+W3OnElwIGbVjsx6/xelY1AA== -vue-demi@0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.4.tgz#6101992fe4724cf5634018a16e953f3052e94e2a" - integrity sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A== +vue-demi@*: + version "0.13.7" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.7.tgz#5ae380b15c13be556ac4a0da0a48450c98a01d4b" + integrity sha512-hbhlvpx1gFW3TB5HxJ0mNxyA9Jh5iQt409taOs6zkhpvfJ7YzLs1rsLufJmDsjH5PI1cOyfikY1fE/meyHfU5A== -vue-dompurify-html@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vue-dompurify-html/-/vue-dompurify-html-2.3.0.tgz#b175edda57362cf7b03d2864468fa644e05a2ad0" - integrity sha512-Iz9wI4iiJF+rzC2x3r8quw/VXrkwgMsWXt9p0Le4wXtolBXwMDJOmK3QNMiNg36bzU2b0f3En/wjidoeRVNZ7A== - dependencies: - dompurify "^2.0.0" +vue-demi@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.1.tgz#7604904c88be338418a10abbc94d5b8caa14cb8c" + integrity sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg== vue-hot-reload-api@^2.3.0: version "2.3.4" @@ -13861,20 +15202,26 @@ vue-hot-reload-api@^2.3.0: integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== vue-i18n@^8.25.0: - version "8.26.7" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.26.7.tgz#adfd48373449fe31438c48e3b3bd43044dc3a681" - integrity sha512-7apa5PvRg1YCLoraE3lOgpCG8hJGupLCtywQWedWsgBbvF0TOgFvhitqK9xRH0PBGG1G8aiJz9oklyNDFfDxLg== + version "8.27.2" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.27.2.tgz#b649a65ff42b7d1a482679b732902f889965a068" + integrity sha512-QVzn7u2WVH8F7eSKIM00lujC7x1mnuGPaTnDTmB01Hd709jDtB9kYtBqM+MWmp5AJRx3gnqAdZbee9MelqwFBg== -vue-jest@^4.0.0-0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-4.0.1.tgz#683efc351c24456865b1356bae69d5bb663dafb5" - integrity sha512-4jewjN8HVgpIW0ZdEwzCWz5vcRLIs1PxMs+5IqJ/6f9KRbEQ+DEqEKHUzIjoNzW2UJOUYBZzWpBnVHakpc/k5w== +vue-jest@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.7.tgz#a6d29758a5cb4d750f5d1242212be39be4296a33" + integrity sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w== dependencies: - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@vue/component-compiler-utils" "^3.1.0" + babel-plugin-transform-es2015-modules-commonjs "^6.26.0" chalk "^2.1.0" + deasync "^0.1.15" extract-from-css "^0.4.4" - source-map "0.5.6" + find-babel-config "^1.1.0" + js-beautify "^1.6.14" + node-cache "^4.1.1" + object-assign "^4.1.1" + source-map "^0.5.6" + tsconfig "^7.0.0" + vue-template-es2015-compiler "^1.6.0" vue-lazy-hydration@^2.0.0-beta.4: version "2.0.0-beta.4" @@ -13882,9 +15229,9 @@ vue-lazy-hydration@^2.0.0-beta.4: integrity sha512-bhr7AxzrSEPed4cOawIeCxJmR8pglberR78x1zs0886xR+47/EXE9s0Ezss90CPINo8ApzUfA/r+SbNffn+t9w== vue-loader@^15.9.7: - version "15.9.8" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.8.tgz#4b0f602afaf66a996be1e534fb9609dc4ab10e61" - integrity sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog== + version "15.10.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.0.tgz#2a12695c421a2a2cc2138f05a949d04ed086e38b" + integrity sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg== dependencies: "@vue/component-compiler-utils" "^3.1.0" hash-sum "^1.0.2" @@ -13905,9 +15252,9 @@ vue-no-ssr@^1.1.1: integrity sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g== vue-router@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999" - integrity sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg== + version "3.5.4" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.4.tgz#c453c0b36bc75554de066fefc3f2a9c3212aca70" + integrity sha512-x+/DLAJZv2mcQ7glH2oV9ze8uPwcI+H+GgTgTmb5I55bCgY3+vXWIsqbYUzbBSZnwFHEJku4eoaH/x98veyymQ== vue-scrollto@^2.20.0: version "2.20.0" @@ -13916,7 +15263,7 @@ vue-scrollto@^2.20.0: dependencies: bezier-easing "2.1.0" -vue-server-renderer@^2.6.12: +vue-server-renderer@2.6.14: version "2.6.14" resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.14.tgz#c8bffff152df6b47b858818ef8d524d2fc351654" integrity sha512-HifYRa/LW7cKywg9gd4ZtvtRuBlstQBao5ZCWlg40fyB4OPoGfEXAzxb0emSLv4pBDOHYx0UjpqvxpiQFEuoLA== @@ -13930,6 +15277,20 @@ vue-server-renderer@^2.6.12: serialize-javascript "^3.1.0" source-map "0.5.6" +vue-server-renderer@^2.6.12: + version "2.7.8" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.7.8.tgz#ee3b32e58ca59a6459d17f090ca9d42a84d54d51" + integrity sha512-d7nf5uRk4BrZLKptAbAcAvmCM4/3VD1xBThjXgLfcAarwta1ngTdXxnVkUHPlYLTUaOFf563EoH2tgxfLY9fcg== + dependencies: + chalk "^4.1.2" + hash-sum "^2.0.0" + he "^1.2.0" + lodash.template "^4.5.0" + lodash.uniq "^4.5.0" + resolve "^1.22.0" + serialize-javascript "^6.0.0" + source-map "0.5.6" + vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" @@ -13938,7 +15299,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.12, vue-template-compiler@^2.6.14: +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== @@ -13946,7 +15307,15 @@ vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14: de-indent "^1.0.2" he "^1.1.0" -vue-template-es2015-compiler@^1.9.0: +vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14: + version "2.7.8" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.8.tgz#eadd54ed8fbff55b7deb07093a976c07f451a1dc" + integrity sha512-eQqdcUpJKJpBRPDdxCNsqUoT0edNvdt1jFjtVnVS/LPPmr0BU2jWzXlrf6BVMeODtdLewB3j8j3WjNiB+V+giw== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== @@ -13956,11 +15325,19 @@ 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.11, vue@^2.6.12: +vue@2.6.14: version "2.6.14" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== +vue@^2.6.11, vue@^2.6.12: + version "2.7.8" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.8.tgz#34e06553137611d8cecc4b0cd78b7a59f80b1299" + integrity sha512-ncwlZx5qOcn754bCu5/tS/IWPhXHopfit79cx+uIlLMyt3vCMGcXai5yCG5y+I6cDmEj4ukRYyZail9FTQh7lQ== + dependencies: + "@vue/compiler-sfc" "2.7.8" + csstype "^3.1.0" + vuex@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71" @@ -13980,7 +15357,14 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7: +w3c-xmlserializer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== + dependencies: + xml-name-validator "^4.0.0" + +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -14021,7 +15405,7 @@ watchpack@^1.7.4: webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^5.0.0: version "5.0.0" @@ -14033,6 +15417,11 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + webpack-bundle-analyzer@^4.4.1: version "4.5.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" @@ -14061,13 +15450,12 @@ webpack-dev-middleware@^4.2.0: schema-utils "^3.0.0" webpack-hot-middleware@^2.25.0: - version "2.25.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz#581f59edf0781743f4ca4c200fd32c9266c6cf7c" - integrity sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw== + version "2.25.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.2.tgz#f7f936f3871d8c4eb95ecdf23a34e9cefe9806e8" + integrity sha512-CVgm3NAQyfdIonRvXisRwPTUYuSbyZ6BY7782tMeUzWOO7RmVI2NaBYuCp41qyD4gYCkJyTneAJdK69A13B0+A== dependencies: ansi-html-community "0.0.8" html-entities "^2.1.0" - querystring "^0.2.0" strip-ansi "^6.0.0" webpack-node-externals@^3.0.0: @@ -14083,7 +15471,12 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.42.1, webpack@^4.46.0: +webpack-virtual-modules@^0.4.3: + version "0.4.4" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz#a19fcf371923c59c4712d63d7d194b1e4d8262cc" + integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== + +webpack@4.46.0, webpack@^4.42.1, webpack@^4.46.0: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== @@ -14133,6 +15526,13 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + whatwg-fetch@^3.4.1: version "3.6.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" @@ -14143,10 +15543,23 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "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@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -14174,28 +15587,28 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== 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.1, which@^2.0.2: +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -14209,6 +15622,13 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -14226,14 +15646,10 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== wrap-ansi@^6.0.0, wrap-ansi@^6.2.0: version "6.2.0" @@ -14253,10 +15669,19 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" + integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.0.0: version "2.4.3" @@ -14267,7 +15692,7 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -14277,10 +15702,18 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" 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== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + integrity sha512-84+F0igFp2dPD6UpAQjOUX3CdKUOqUzn6oE9sDBNzUXINR5VceJ1rauZltqQB/bcYsx3EpKys4C7/PivKUAiWQ== dependencies: detect-indent "^5.0.0" graceful-fs "^4.1.2" @@ -14290,25 +15723,35 @@ write-json-file@^2.3.0: write-file-atomic "^2.0.0" ws@^7.0.0, ws@^7.3.1, ws@^7.4.6: - version "7.5.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" - integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== ws@~7.4.0: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" + integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -14317,7 +15760,15 @@ xmlchars@^2.2.0: xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== + +xss@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.13.tgz#6e48f616128b39f366dfadc57411e1eb5b341c6c" + integrity sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" @@ -14344,7 +15795,7 @@ y18n@^5.0.5: yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.2: version "3.1.1" @@ -14356,11 +15807,16 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.7.2: +yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yamljs@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" @@ -14369,18 +15825,10 @@ yamljs@0.3.0: argparse "^1.0.7" glob "^7.0.5" -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.7: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^18.1.2: version "18.1.3" @@ -14390,21 +15838,38 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.2.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0, 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" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yargs@^15.3.1: version "15.4.1" @@ -14423,49 +15888,45 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +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.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.0.0" -yauzl@^2.10.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" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zen-observable-ts@^0.8.21: - version "0.8.21" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" - integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== - dependencies: - tslib "^1.9.3" - zen-observable "^0.8.0" - -zen-observable-ts@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" - integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== dependencies: - "@types/zen-observable" "0.8.3" zen-observable "0.8.15" -zen-observable@0.8.15, zen-observable@^0.8.0: +zen-observable@0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==