diff --git a/ISSUE_TEMPLATE/1.core_bug_report.yml b/.github/ISSUE_TEMPLATE/1.core_bug_report.yml similarity index 100% rename from ISSUE_TEMPLATE/1.core_bug_report.yml rename to .github/ISSUE_TEMPLATE/1.core_bug_report.yml diff --git a/ISSUE_TEMPLATE/2.provider_bug_report.yml b/.github/ISSUE_TEMPLATE/2.provider_bug_report.yml similarity index 100% rename from ISSUE_TEMPLATE/2.provider_bug_report.yml rename to .github/ISSUE_TEMPLATE/2.provider_bug_report.yml diff --git a/ISSUE_TEMPLATE/3.feature_request.yml b/.github/ISSUE_TEMPLATE/3.feature_request.yml similarity index 100% rename from ISSUE_TEMPLATE/3.feature_request.yml rename to .github/ISSUE_TEMPLATE/3.feature_request.yml diff --git a/ISSUE_TEMPLATE/4.docs_request.yml b/.github/ISSUE_TEMPLATE/4.docs_request.yml similarity index 100% rename from ISSUE_TEMPLATE/4.docs_request.yml rename to .github/ISSUE_TEMPLATE/4.docs_request.yml diff --git a/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from ISSUE_TEMPLATE/config.yml rename to .github/ISSUE_TEMPLATE/config.yml diff --git a/.gitignore b/.gitignore index b7301fe56..10295bccc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - # dependencies node_modules .pnp .pnp.js +.pnpm-debug.log # testing coverage diff --git a/README.md b/README.md index 10502012a..2bb8b5525 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,11 @@ Demo live at: [demo.vercel.store](https://demo.vercel.store/) ## Run minimal version locally -> To run a minimal version of Next.js Commerce you can start with the default local provider `@vercel/commerce-local` that has disabled all features (cart, auth) and use static files for the backend +> To run a minimal version of Next.js Commerce you can start with the default local provider `@vercel/commerce-local` that has all features disabled (cart, auth) and uses static files for the backend ```bash -yarn # run this command in root folder of the mono repo -yarn dev +pnpm install & pnpm build # run these commands in the root folder of the mono repo +pnpm dev # run this command in the site folder ``` > If you encounter any problems while installing and running for the first time, please see the Troubleshoot section @@ -47,10 +47,10 @@ Next.js Commerce integrates out-of-the-box with BigCommerce, Shopify, Swell, Sal ## Considerations -- `packages/commerce` contains all types, helpers and functions to be used as base to build a new **provider**. +- `packages/commerce` contains all types, helpers and functions to be used as a base to build a new **provider**. - **Providers** live under `packages`'s root folder and they will extend Next.js Commerce types and functionality (`packages/commerce`). -- We have a **Features API** to ensure feature parity between the UI and the Provider. The UI should update accordingly and no extra code should be bundled. All extra configuration for features will live under `features` in `commerce.config.json` and if needed it can also be accessed programatically. -- Each **provider** should add its corresponding `next.config.js` and `commerce.config.json` adding specific data related to the provider. For example in case of BigCommerce, the images CDN and additional API routes. +- We have a **Features API** to ensure feature parity between the UI and the Provider. The UI should update accordingly and no extra code should be bundled. All extra configuration for features will live under `features` in `commerce.config.json` and if needed it can also be accessed programmatically. +- Each **provider** should add its corresponding `next.config.js` and `commerce.config.json` adding specific data related to the provider. For example in the case of BigCommerce, the images CDN and additional API routes. ## Configuration @@ -73,7 +73,7 @@ Every provider defines the features that it supports under `packages/{provider}/ #### Features Available The following features can be enabled or disabled. This means that the UI will remove all code related to the feature. -For example: Turning `cart` off will disable Cart capabilities. +For example: turning `cart` off will disable Cart capabilities. - cart - search @@ -83,7 +83,7 @@ For example: Turning `cart` off will disable Cart capabilities. #### How to turn Features on and off -> NOTE: The selected provider should support the feature that you are toggling. (This means that you can't turn wishlist on if the provider doesn't support this functionality out the box) +> NOTE: The selected provider should support the feature that you are toggling. (This means that you can't turn wishlist on if the provider doesn't support this functionality out of the box) - Open `site/commerce.config.json` - You'll see a config file like this: @@ -110,11 +110,12 @@ Our commitment to Open Source can be found [here](https://vercel.com/oss). 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device. 2. Create a new branch `git checkout -b MY_BRANCH_NAME` -3. Install the dependencies: `yarn` -4. Duplicate `site/.env.template` and rename it to `site/.env.local` -5. Add proper store values to `site/.env.local` -6. Run `cd site` and `yarn dev` to build and watch for code changes -7. Run `yarn turbo run build` to check the build after your changes +3. Install the dependencies: `pnpm install` +4. Build the packages: `pnpm build` +5. Duplicate `site/.env.template` and rename it to `site/.env.local` +6. Add proper store values to `site/.env.local` +7. Run `cd site` & `pnpm dev` to watch for code changes +8. Run `pnpm turbo run build` to check the build after your changes ## Work in progress @@ -189,10 +190,10 @@ error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ``` -The error usually occurs when running yarn dev inside of the `/site/` folder after installing a fresh repository. +The error usually occurs when running `pnpm dev` inside of the `/site/` folder after installing a fresh repository. -In order to fix this, run `yarn dev` in the monorepo root folder first. +In order to fix this, run `pnpm build` in the monorepo root folder first. -> Using `yarn dev` from the root is recommended for developing, which will run watch mode on all packages. +> Using `pnpm dev` from the root is recommended for developing, which will run watch mode on all packages. diff --git a/package.json b/package.json index fc97f30b9..d6873ba9e 100644 --- a/package.json +++ b/package.json @@ -2,26 +2,22 @@ "name": "commerce", "license": "MIT", "private": true, - "workspaces": [ - "site", - "packages/*" - ], "scripts": { - "build": "turbo run build --scope=next-commerce --include-dependencies --no-deps", + "build": "turbo run build --filter=next-commerce...", "dev": "turbo run dev", "start": "turbo run start", "types": "turbo run types", "prettier-fix": "prettier --write ." }, "devDependencies": { - "husky": "^7.0.4", - "prettier": "^2.5.1", - "turbo": "^1.1.2" + "husky": "^8.0.1", + "prettier": "^2.7.1", + "turbo": "^1.4.6" }, "husky": { "hooks": { "pre-commit": "turbo run lint" } }, - "packageManager": "yarn@1.22.17" + "packageManager": "pnpm@7.5.0" } diff --git a/packages/bigcommerce/package.json b/packages/bigcommerce/package.json index 34b8ac614..08972a67f 100644 --- a/packages/bigcommerce/package.json +++ b/packages/bigcommerce/package.json @@ -47,17 +47,20 @@ } }, "dependencies": { - "@vercel/fetch": "^6.1.1", + "@cfworker/uuid": "^1.12.4", + "@tsndr/cloudflare-worker-jwt": "^2.1.0", + "@vercel/commerce": "workspace:*", "cookie": "^0.4.1", "immutability-helper": "^3.1.1", + "js-cookie": "^3.0.1", "jsonwebtoken": "^8.5.1", "lodash.debounce": "^4.0.8", - "uuidv4": "^6.2.12" + "uuidv4": "^6.2.13" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", @@ -67,15 +70,16 @@ "@types/jsonwebtoken": "^8.5.7", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "^2.6.2", + "@types/react": "^18.0.14", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/bigcommerce/src/api/definitions/catalog.ts b/packages/bigcommerce/src/api/definitions/catalog.ts index 2c483f781..d24d5963b 100644 --- a/packages/bigcommerce/src/api/definitions/catalog.ts +++ b/packages/bigcommerce/src/api/definitions/catalog.ts @@ -1130,7 +1130,7 @@ export interface definitions { */ search_keywords?: string /** - * Image URL used for this category on the storefront. Images can be uploaded via form file post to `/brands/{brandId}/image`, or by providing a publicly accessible URL in this field. + * Image URL used for this category on the storefront. Images can be uploaded via form file post to `/{brandId}/image`, or by providing a publicly accessible URL in this field. */ image_url?: string custom_url?: definitions['customUrl_Full'] diff --git a/packages/bigcommerce/src/api/endpoints/cart/add-item.ts b/packages/bigcommerce/src/api/endpoints/cart/add-item.ts index d2bb7ad6d..bfb0cfe0b 100644 --- a/packages/bigcommerce/src/api/endpoints/cart/add-item.ts +++ b/packages/bigcommerce/src/api/endpoints/cart/add-item.ts @@ -1,21 +1,14 @@ +import type { CartEndpoint } from '.' +import type { BigcommerceCart } from '../../../types' + import { normalizeCart } from '../../../lib/normalize' import { parseCartItem } from '../../utils/parse-item' import getCartCookie from '../../utils/get-cart-cookie' -import type { CartEndpoint } from '.' const addItem: CartEndpoint['handlers']['addItem'] = async ({ - res, body: { cartId, item }, config, }) => { - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - if (!item.quantity) item.quantity = 1 - const options = { method: 'POST', body: JSON.stringify({ @@ -25,22 +18,27 @@ const addItem: CartEndpoint['handlers']['addItem'] = async ({ : {}), }), } + const { data } = cartId - ? await config.storeApiFetch( + ? await config.storeApiFetch<{ data: BigcommerceCart }>( `/v3/carts/${cartId}/items?include=line_items.physical_items.options,line_items.digital_items.options`, options ) - : await config.storeApiFetch( + : await config.storeApiFetch<{ data: BigcommerceCart }>( '/v3/carts?include=line_items.physical_items.options,line_items.digital_items.options', options ) - // Create or update the cart cookie - res.setHeader( - 'Set-Cookie', - getCartCookie(config.cartCookie, data.id, config.cartCookieMaxAge) - ) - res.status(200).json({ data: normalizeCart(data) }) + return { + data: normalizeCart(data), + headers: { + 'Set-Cookie': getCartCookie( + config.cartCookie, + data.id, + config.cartCookieMaxAge + ), + }, + } } export default addItem diff --git a/packages/bigcommerce/src/api/endpoints/cart/get-cart.ts b/packages/bigcommerce/src/api/endpoints/cart/get-cart.ts index b6a7d88e9..4fcf2b190 100644 --- a/packages/bigcommerce/src/api/endpoints/cart/get-cart.ts +++ b/packages/bigcommerce/src/api/endpoints/cart/get-cart.ts @@ -1,35 +1,41 @@ +import type { CartEndpoint } from '.' +import type { BigcommerceCart } from '../../../types' + +import getCartCookie from '../../utils/get-cart-cookie' + import { normalizeCart } from '../../../lib/normalize' import { BigcommerceApiError } from '../../utils/errors' -import getCartCookie from '../../utils/get-cart-cookie' -import type { BigcommerceCart } from '../../../types/cart' -import type { CartEndpoint } from '.' // Return current cart info const getCart: CartEndpoint['handlers']['getCart'] = async ({ - res, body: { cartId }, config, }) => { - let result: { data?: BigcommerceCart } = {} - if (cartId) { try { - result = await config.storeApiFetch( + const result = await config.storeApiFetch<{ + data?: BigcommerceCart + } | null>( `/v3/carts/${cartId}?include=line_items.physical_items.options,line_items.digital_items.options` ) + + return { + data: result?.data ? normalizeCart(result.data) : null, + } } catch (error) { if (error instanceof BigcommerceApiError && error.status === 404) { - // Remove the cookie if it exists but the cart wasn't found - res.setHeader('Set-Cookie', getCartCookie(config.cartCookie)) + return { + headers: { 'Set-Cookie': getCartCookie(config.cartCookie) }, + } } else { throw error } } } - res.status(200).json({ - data: result.data ? normalizeCart(result.data) : null, - }) + return { + data: null, + } } export default getCart diff --git a/packages/bigcommerce/src/api/endpoints/cart/index.ts b/packages/bigcommerce/src/api/endpoints/cart/index.ts index 376651178..bd2fbfe65 100644 --- a/packages/bigcommerce/src/api/endpoints/cart/index.ts +++ b/packages/bigcommerce/src/api/endpoints/cart/index.ts @@ -1,6 +1,6 @@ -import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' +import { type GetAPISchema, createEndpoint } from '@vercel/commerce/api' import cartEndpoint from '@vercel/commerce/api/endpoints/cart' -import type { CartSchema } from '../../../types/cart' +import type { CartSchema } from '@vercel/commerce/types/cart' import type { BigcommerceAPI } from '../..' import getCart from './get-cart' import addItem from './add-item' diff --git a/packages/bigcommerce/src/api/endpoints/cart/remove-item.ts b/packages/bigcommerce/src/api/endpoints/cart/remove-item.ts index baf10c80f..c3f6c41c6 100644 --- a/packages/bigcommerce/src/api/endpoints/cart/remove-item.ts +++ b/packages/bigcommerce/src/api/endpoints/cart/remove-item.ts @@ -1,34 +1,26 @@ -import { normalizeCart } from '../../../lib/normalize' -import getCartCookie from '../../utils/get-cart-cookie' import type { CartEndpoint } from '.' +import { normalizeCart } from '../../../lib/normalize' +import getCartCookie from '../../utils/get-cart-cookie' + const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ - res, body: { cartId, itemId }, config, }) => { - if (!cartId || !itemId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - const result = await config.storeApiFetch<{ data: any } | null>( `/v3/carts/${cartId}/items/${itemId}?include=line_items.physical_items.options`, { method: 'DELETE' } ) - const data = result?.data ?? null - - res.setHeader( - 'Set-Cookie', - data - ? // Update the cart cookie - getCartCookie(config.cartCookie, cartId, config.cartCookieMaxAge) - : // Remove the cart cookie if the cart was removed (empty items) - getCartCookie(config.cartCookie) - ) - res.status(200).json({ data: data && normalizeCart(data) }) + return { + data: result?.data ? normalizeCart(result.data) : null, + headers: { + 'Set-Cookie': result?.data + ? // Update the cart cookie + getCartCookie(config.cartCookie, cartId, config.cartCookieMaxAge) + : // Remove the cart cookie if the cart was removed (empty items) + getCartCookie(config.cartCookie), + }, + } } export default removeItem diff --git a/packages/bigcommerce/src/api/endpoints/cart/update-item.ts b/packages/bigcommerce/src/api/endpoints/cart/update-item.ts index 113553fad..33a65be88 100644 --- a/packages/bigcommerce/src/api/endpoints/cart/update-item.ts +++ b/packages/bigcommerce/src/api/endpoints/cart/update-item.ts @@ -1,21 +1,15 @@ +import type { CartEndpoint } from '.' +import type { BigcommerceCart } from '../../../types' + import { normalizeCart } from '../../../lib/normalize' import { parseCartItem } from '../../utils/parse-item' import getCartCookie from '../../utils/get-cart-cookie' -import type { CartEndpoint } from '.' const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ - res, body: { cartId, itemId, item }, config, }) => { - if (!cartId || !itemId || !item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - - const { data } = await config.storeApiFetch( + const { data } = await config.storeApiFetch<{ data: BigcommerceCart }>( `/v3/carts/${cartId}/items/${itemId}?include=line_items.physical_items.options`, { method: 'PUT', @@ -25,12 +19,16 @@ const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ } ) - // Update the cart cookie - res.setHeader( - 'Set-Cookie', - getCartCookie(config.cartCookie, cartId, config.cartCookieMaxAge) - ) - res.status(200).json({ data: normalizeCart(data) }) + return { + data: normalizeCart(data), + headers: { + 'Set-Cookie': getCartCookie( + config.cartCookie, + cartId, + config.cartCookieMaxAge + ), + }, + } } export default updateItem diff --git a/packages/bigcommerce/src/api/endpoints/catalog/products/get-products.ts b/packages/bigcommerce/src/api/endpoints/catalog/products/get-products.ts index f88a231e1..9b067ca4a 100644 --- a/packages/bigcommerce/src/api/endpoints/catalog/products/get-products.ts +++ b/packages/bigcommerce/src/api/endpoints/catalog/products/get-products.ts @@ -11,7 +11,6 @@ const LIMIT = 12 // Return current cart info const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ - res, body: { search, categoryId, brandId, sort }, config, commerce, @@ -73,7 +72,7 @@ const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ if (product) products.push(product) }) - res.status(200).json({ data: { products, found } }) + return { data: { products, found } } } export default getProducts diff --git a/packages/bigcommerce/src/api/endpoints/catalog/products/index.ts b/packages/bigcommerce/src/api/endpoints/catalog/products/index.ts index 24472434d..8de51fd93 100644 --- a/packages/bigcommerce/src/api/endpoints/catalog/products/index.ts +++ b/packages/bigcommerce/src/api/endpoints/catalog/products/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import productsEndpoint from '@vercel/commerce/api/endpoints/catalog/products' -import type { ProductsSchema } from '../../../../types/product' +import type { ProductsSchema } from '@vercel/commerce/types/product' import type { BigcommerceAPI } from '../../..' import getProducts from './get-products' diff --git a/packages/bigcommerce/src/api/endpoints/checkout/get-checkout.ts b/packages/bigcommerce/src/api/endpoints/checkout/get-checkout.ts index e98e6ca54..680bfbbe7 100644 --- a/packages/bigcommerce/src/api/endpoints/checkout/get-checkout.ts +++ b/packages/bigcommerce/src/api/endpoints/checkout/get-checkout.ts @@ -1,38 +1,47 @@ import type { CheckoutEndpoint } from '.' import getCustomerId from '../../utils/get-customer-id' -import jwt from 'jsonwebtoken' -import { uuid } from 'uuidv4' const fullCheckout = true const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, - res, config, }) => { const { cookies } = req - const cartId = cookies[config.cartCookie] - const customerToken = cookies[config.customerCookie] + const cartId = cookies.get(config.cartCookie)?.value + const customerToken = cookies.get(config.customerCookie)?.value + if (!cartId) { - res.redirect('/cart') - return + return { redirectTo: '/cart' } } - const { data } = await config.storeApiFetch( + + const { data } = await config.storeApiFetch( `/v3/carts/${cartId}/redirect_urls`, { method: 'POST', } ) + const customerId = customerToken && (await getCustomerId({ customerToken, config })) //if there is a customer create a jwt token if (!customerId) { if (fullCheckout) { - res.redirect(data.checkout_url) - return + return { redirectTo: data.checkout_url } } } else { + // Dynamically import uuid & jsonwebtoken based on the runtime + const { uuid } = + process.env.NEXT_RUNTIME === 'edge' + ? await import('@cfworker/uuid') + : await import('uuidv4') + + const jwt = + process.env.NEXT_RUNTIME === 'edge' + ? await import('@tsndr/cloudflare-worker-jwt') + : await import('jsonwebtoken') + const dateCreated = Math.round(new Date().getTime() / 1000) const payload = { iss: config.storeApiClientId, @@ -42,49 +51,51 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ store_hash: config.storeHash, customer_id: customerId, channel_id: config.storeChannelId, - redirect_to: data.checkout_url.replace(config.storeUrl, ""), + redirect_to: data.checkout_url.replace(config.storeUrl, ''), } let token = jwt.sign(payload, config.storeApiClientSecret!, { algorithm: 'HS256', }) let checkouturl = `${config.storeUrl}/login/token/${token}` - console.log('checkouturl', checkouturl) + if (fullCheckout) { - res.redirect(checkouturl) - return + return { redirectTo: checkouturl } } } // TODO: make the embedded checkout work too! - const html = ` - - - - - - Checkout - - - - -
- - - ` + // const html = ` + // + // + // + // + // + // Checkout + // + // + // + // + //
+ // + // + // ` - res.status(200) - res.setHeader('Content-Type', 'text/html') - res.write(html) - res.end() + // return new Response(html, { + // headers: { + // 'Content-Type': 'text/html', + // }, + // }) + + return { data: null } } export default getCheckout diff --git a/packages/bigcommerce/src/api/endpoints/checkout/index.ts b/packages/bigcommerce/src/api/endpoints/checkout/index.ts index 83bc4ae08..908ba0fd7 100644 --- a/packages/bigcommerce/src/api/endpoints/checkout/index.ts +++ b/packages/bigcommerce/src/api/endpoints/checkout/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import checkoutEndpoint from '@vercel/commerce/api/endpoints/checkout' -import type { CheckoutSchema } from '../../../types/checkout' +import type { CheckoutSchema } from '@vercel/commerce/types/checkout' import type { BigcommerceAPI } from '../..' import getCheckout from './get-checkout' diff --git a/packages/bigcommerce/src/api/endpoints/customer/address.ts b/packages/bigcommerce/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/bigcommerce/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/bigcommerce/src/api/endpoints/customer/card.ts b/packages/bigcommerce/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/bigcommerce/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/bigcommerce/src/api/endpoints/customer/get-logged-in-customer.ts b/packages/bigcommerce/src/api/endpoints/customer/get-logged-in-customer.ts index 4c93730f6..02de28b23 100644 --- a/packages/bigcommerce/src/api/endpoints/customer/get-logged-in-customer.ts +++ b/packages/bigcommerce/src/api/endpoints/customer/get-logged-in-customer.ts @@ -1,5 +1,6 @@ import type { GetLoggedInCustomerQuery } from '../../../../schema' import type { CustomerEndpoint } from '.' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' export const getLoggedInCustomerQuery = /* GraphQL */ ` query getLoggedInCustomer { @@ -25,8 +26,8 @@ export const getLoggedInCustomerQuery = /* GraphQL */ ` export type Customer = NonNullable const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = - async ({ req, res, config }) => { - const token = req.cookies[config.customerCookie] + async ({ req, config }) => { + const token = req.cookies.get(config.customerCookie)?.value if (token) { const { data } = await config.fetch( @@ -41,16 +42,29 @@ const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = const { customer } = data if (!customer) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Customer not found', code: 'not_found' }], + throw new CommerceAPIError('Customer not found', { + status: 404, }) } - return res.status(200).json({ data: { customer } }) + return { + data: { + customer: { + id: String(customer.entityId), + firstName: customer.firstName, + lastName: customer.lastName, + email: customer.email, + company: customer.company, + phone: customer.phone, + notes: customer.notes, + }, + }, + } } - res.status(200).json({ data: null }) + return { + data: null, + } } export default getLoggedInCustomer diff --git a/packages/bigcommerce/src/api/endpoints/customer/index.ts b/packages/bigcommerce/src/api/endpoints/customer/index.ts index 5efff392c..c719bc38f 100644 --- a/packages/bigcommerce/src/api/endpoints/customer/index.ts +++ b/packages/bigcommerce/src/api/endpoints/customer/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import customerEndpoint from '@vercel/commerce/api/endpoints/customer' -import type { CustomerSchema } from '../../../types/customer' +import type { CustomerSchema } from '@vercel/commerce/types/customer' import type { BigcommerceAPI } from '../..' import getLoggedInCustomer from './get-logged-in-customer' diff --git a/packages/bigcommerce/src/api/endpoints/index.ts b/packages/bigcommerce/src/api/endpoints/index.ts new file mode 100644 index 000000000..32f142a9b --- /dev/null +++ b/packages/bigcommerce/src/api/endpoints/index.ts @@ -0,0 +1,27 @@ +import type { BigcommerceAPI, Provider } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' + +import cart from './cart' +import login from './login' +import logout from './logout' +import signup from './signup' +import checkout from './checkout' +import customer from './customer' +import wishlist from './wishlist' +import products from './catalog/products' + +const endpoints = { + cart, + login, + logout, + signup, + checkout, + wishlist, + customer, + 'catalog/products': products, +} + +export default function bigcommerceAPI(commerce: BigcommerceAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/bigcommerce/src/api/endpoints/login/index.ts b/packages/bigcommerce/src/api/endpoints/login/index.ts index 1ad6f7102..0a4331b33 100644 --- a/packages/bigcommerce/src/api/endpoints/login/index.ts +++ b/packages/bigcommerce/src/api/endpoints/login/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import loginEndpoint from '@vercel/commerce/api/endpoints/login' -import type { LoginSchema } from '../../../types/login' +import type { LoginSchema } from '@vercel/commerce/types/login' import type { BigcommerceAPI } from '../..' import login from './login' diff --git a/packages/bigcommerce/src/api/endpoints/login/login.ts b/packages/bigcommerce/src/api/endpoints/login/login.ts index 0ebc5b110..dda5f6bf7 100644 --- a/packages/bigcommerce/src/api/endpoints/login/login.ts +++ b/packages/bigcommerce/src/api/endpoints/login/login.ts @@ -1,49 +1,35 @@ -import { FetcherError } from '@vercel/commerce/utils/errors' import type { LoginEndpoint } from '.' +import { FetcherError } from '@vercel/commerce/utils/errors' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' + const invalidCredentials = /invalid credentials/i const login: LoginEndpoint['handlers']['login'] = async ({ - res, body: { email, password }, config, commerce, }) => { - // TODO: Add proper validations with something like Ajv - if (!(email && password)) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - // TODO: validate the password and email - // Passwords must be at least 7 characters and contain both alphabetic - // and numeric characters. - try { - await commerce.login({ variables: { email, password }, config, res }) + const response = await commerce.login({ + variables: { email, password }, + config, + }) + + return response } catch (error) { // Check if the email and password didn't match an existing account - if ( - error instanceof FetcherError && - invalidCredentials.test(error.message) - ) { - return res.status(401).json({ - data: null, - errors: [ - { - message: - 'Cannot find an account that matches the provided credentials', - code: 'invalid_credentials', - }, - ], - }) + if (error instanceof FetcherError) { + throw new CommerceAPIError( + invalidCredentials.test(error.message) + ? 'Cannot find an account that matches the provided credentials' + : error.message, + { status: 401 } + ) + } else { + throw error } - - throw error } - - res.status(200).json({ data: null }) } export default login diff --git a/packages/bigcommerce/src/api/endpoints/logout/index.ts b/packages/bigcommerce/src/api/endpoints/logout/index.ts index 94a246f4b..01893c3d4 100644 --- a/packages/bigcommerce/src/api/endpoints/logout/index.ts +++ b/packages/bigcommerce/src/api/endpoints/logout/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import logoutEndpoint from '@vercel/commerce/api/endpoints/logout' -import type { LogoutSchema } from '../../../types/logout' +import type { LogoutSchema } from '@vercel/commerce/types/logout' import type { BigcommerceAPI } from '../..' import logout from './logout' diff --git a/packages/bigcommerce/src/api/endpoints/logout/logout.ts b/packages/bigcommerce/src/api/endpoints/logout/logout.ts index b90a8c3ce..51e63f900 100644 --- a/packages/bigcommerce/src/api/endpoints/logout/logout.ts +++ b/packages/bigcommerce/src/api/endpoints/logout/logout.ts @@ -2,22 +2,24 @@ import { serialize } from 'cookie' import type { LogoutEndpoint } from '.' const logout: LogoutEndpoint['handlers']['logout'] = async ({ - res, body: { redirectTo }, config, }) => { - // Remove the cookie - res.setHeader( - 'Set-Cookie', - serialize(config.customerCookie, '', { maxAge: -1, path: '/' }) - ) - - // Only allow redirects to a relative URL - if (redirectTo?.startsWith('/')) { - res.redirect(redirectTo) - } else { - res.status(200).json({ data: null }) + const headers = { + 'Set-Cookie': serialize(config.customerCookie, '', { + maxAge: -1, + path: '/', + }), } + + return redirectTo + ? { + redirectTo, + headers, + } + : { + headers, + } } export default logout diff --git a/packages/bigcommerce/src/api/endpoints/signup/index.ts b/packages/bigcommerce/src/api/endpoints/signup/index.ts index 64521f964..3517826aa 100644 --- a/packages/bigcommerce/src/api/endpoints/signup/index.ts +++ b/packages/bigcommerce/src/api/endpoints/signup/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import signupEndpoint from '@vercel/commerce/api/endpoints/signup' -import type { SignupSchema } from '../../../types/signup' +import type { SignupSchema } from '@vercel/commerce/types/signup' import type { BigcommerceAPI } from '../..' import signup from './signup' diff --git a/packages/bigcommerce/src/api/endpoints/signup/signup.ts b/packages/bigcommerce/src/api/endpoints/signup/signup.ts index 46c071be8..aa591e5de 100644 --- a/packages/bigcommerce/src/api/endpoints/signup/signup.ts +++ b/packages/bigcommerce/src/api/endpoints/signup/signup.ts @@ -1,23 +1,12 @@ -import { BigcommerceApiError } from '../../utils/errors' import type { SignupEndpoint } from '.' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' +import { BigcommerceApiError } from '../../utils/errors' const signup: SignupEndpoint['handlers']['signup'] = async ({ - res, body: { firstName, lastName, email, password }, config, commerce, }) => { - // TODO: Add proper validations with something like Ajv - if (!(firstName && lastName && email && password)) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - // TODO: validate the password and email - // Passwords must be at least 7 characters and contain both alphabetic - // and numeric characters. - try { await config.storeApiFetch('/v3/customers', { method: 'POST', @@ -32,31 +21,28 @@ const signup: SignupEndpoint['handlers']['signup'] = async ({ }, ]), }) - } catch (error) { - if (error instanceof BigcommerceApiError && error.status === 422) { - const hasEmailError = '0.email' in error.data?.errors - // If there's an error with the email, it most likely means it's duplicated - if (hasEmailError) { - return res.status(400).json({ - data: null, - errors: [ - { - message: 'The email is already in use', - code: 'duplicated_email', - }, - ], + // Login the customer right after creating it + const response = await commerce.login({ + variables: { email, password }, + config, + }) + + return response + } catch (error) { + // Display all validation errors from BigCommerce in a single error message + if (error instanceof BigcommerceApiError && error.status >= 400) { + const message = Object.values(error.data.errors).join('
') + if (message) { + throw new CommerceAPIError(message, { + status: 400, + code: 'invalid_request', }) } } throw error } - - // Login the customer right after creating it - await commerce.login({ variables: { email, password }, res, config }) - - res.status(200).json({ data: null }) } export default signup diff --git a/packages/bigcommerce/src/api/endpoints/wishlist/add-item.ts b/packages/bigcommerce/src/api/endpoints/wishlist/add-item.ts index 734a64402..128390ca3 100644 --- a/packages/bigcommerce/src/api/endpoints/wishlist/add-item.ts +++ b/packages/bigcommerce/src/api/endpoints/wishlist/add-item.ts @@ -1,66 +1,55 @@ -import getCustomerWishlist from '../../operations/get-customer-wishlist' import { parseWishlistItem } from '../../utils/parse-item' import getCustomerId from '../../utils/get-customer-id' import type { WishlistEndpoint } from '.' +import { normalizeWishlist } from '../../../lib/normalize' const addItem: WishlistEndpoint['handlers']['addItem'] = async ({ - res, body: { customerToken, item }, config, commerce, }) => { - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + + if (!customerId) { + throw new Error('Invalid request. No CustomerId') } - try { - const customerId = - customerToken && (await getCustomerId({ customerToken, config })) + let { wishlist } = await commerce.getCustomerWishlist({ + variables: { customerId }, + config, + }) - if (!customerId) { - throw new Error('Invalid request. No CustomerId') - } - - let { wishlist } = await commerce.getCustomerWishlist({ - variables: { customerId }, - config, + if (!wishlist) { + // If user has no wishlist, then let's create one with new item + const { data } = await config.storeApiFetch('/v3/wishlists', { + method: 'POST', + body: JSON.stringify({ + name: 'Next.js Commerce Wishlist', + is_public: false, + customer_id: Number(customerId), + items: [parseWishlistItem(item)], + }), }) - - if (!wishlist) { - // If user has no wishlist, then let's create one with new item - const { data } = await config.storeApiFetch('/v3/wishlists', { - method: 'POST', - body: JSON.stringify({ - name: 'Next.js Commerce Wishlist', - is_public: false, - customer_id: Number(customerId), - items: [parseWishlistItem(item)], - }), - }) - return res.status(200).json(data) + return { + data: normalizeWishlist(data), } + } - // Existing Wishlist, let's add Item to Wishlist - const { data } = await config.storeApiFetch( - `/v3/wishlists/${wishlist.id}/items`, - { - method: 'POST', - body: JSON.stringify({ - items: [parseWishlistItem(item)], - }), - } - ) + // Existing Wishlist, let's add Item to Wishlist + const { data } = await config.storeApiFetch( + `/v3/wishlists/${wishlist.id}/items`, + { + method: 'POST', + body: JSON.stringify({ + items: [parseWishlistItem(item)], + }), + } + ) - // Returns Wishlist - return res.status(200).json(data) - } catch (err: any) { - res.status(500).json({ - data: null, - errors: [{ message: err.message }], - }) + // Returns Wishlist + return { + data: normalizeWishlist(data), } } diff --git a/packages/bigcommerce/src/api/endpoints/wishlist/get-wishlist.ts b/packages/bigcommerce/src/api/endpoints/wishlist/get-wishlist.ts index 479a67c6e..325adce54 100644 --- a/packages/bigcommerce/src/api/endpoints/wishlist/get-wishlist.ts +++ b/packages/bigcommerce/src/api/endpoints/wishlist/get-wishlist.ts @@ -1,27 +1,19 @@ -import type { Wishlist } from '../../../types/wishlist' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' import type { WishlistEndpoint } from '.' import getCustomerId from '../../utils/get-customer-id' -import getCustomerWishlist from '../../operations/get-customer-wishlist' // Return wishlist info const getWishlist: WishlistEndpoint['handlers']['getWishlist'] = async ({ - res, body: { customerToken, includeProducts }, config, commerce, }) => { - let result: { data?: Wishlist } = {} - if (customerToken) { const customerId = customerToken && (await getCustomerId({ customerToken, config })) if (!customerId) { - // If the customerToken is invalid, then this request is too - return res.status(404).json({ - data: null, - errors: [{ message: 'Wishlist not found' }], - }) + throw new CommerceAPIError('Wishlist not found', { status: 404 }) } const { wishlist } = await commerce.getCustomerWishlist({ @@ -30,10 +22,10 @@ const getWishlist: WishlistEndpoint['handlers']['getWishlist'] = async ({ config, }) - result = { data: wishlist } + return { data: wishlist } } - res.status(200).json({ data: result.data ?? null }) + return { data: null } } export default getWishlist diff --git a/packages/bigcommerce/src/api/endpoints/wishlist/index.ts b/packages/bigcommerce/src/api/endpoints/wishlist/index.ts index 87728225d..1a337006d 100644 --- a/packages/bigcommerce/src/api/endpoints/wishlist/index.ts +++ b/packages/bigcommerce/src/api/endpoints/wishlist/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import wishlistEndpoint from '@vercel/commerce/api/endpoints/wishlist' -import type { WishlistSchema } from '../../../types/wishlist' +import type { WishlistSchema } from '@vercel/commerce/types/wishlist' import type { BigcommerceAPI } from '../..' import getWishlist from './get-wishlist' import addItem from './add-item' diff --git a/packages/bigcommerce/src/api/endpoints/wishlist/remove-item.ts b/packages/bigcommerce/src/api/endpoints/wishlist/remove-item.ts index 9b19d9b42..4a79728a2 100644 --- a/packages/bigcommerce/src/api/endpoints/wishlist/remove-item.ts +++ b/packages/bigcommerce/src/api/endpoints/wishlist/remove-item.ts @@ -1,17 +1,19 @@ -import type { Wishlist } from '../../../types/wishlist' -import getCustomerWishlist from '../../operations/get-customer-wishlist' -import getCustomerId from '../../utils/get-customer-id' import type { WishlistEndpoint } from '.' +import type { BCWishlist } from '../../utils/types' + +import getCustomerId from '../../utils/get-customer-id' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' +import { normalizeWishlist } from '../../../lib/normalize' // Return wishlist info const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({ - res, body: { customerToken, itemId }, config, commerce, }) => { const customerId = customerToken && (await getCustomerId({ customerToken, config })) + const { wishlist } = (customerId && (await commerce.getCustomerWishlist({ @@ -21,19 +23,15 @@ const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({ {} if (!wishlist || !itemId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) + throw new CommerceAPIError('Wishlist not found', { status: 400 }) } - const result = await config.storeApiFetch<{ data: Wishlist } | null>( + const result = await config.storeApiFetch<{ data: BCWishlist } | null>( `/v3/wishlists/${wishlist.id}/items/${itemId}`, { method: 'DELETE' } ) - const data = result?.data ?? null - res.status(200).json({ data }) + return { data: result?.data ? normalizeWishlist(result.data) : null } } export default removeItem diff --git a/packages/bigcommerce/src/api/index.ts b/packages/bigcommerce/src/api/index.ts index bd5fcb3b7..98f61d6d4 100644 --- a/packages/bigcommerce/src/api/index.ts +++ b/packages/bigcommerce/src/api/index.ts @@ -1,4 +1,3 @@ -import type { RequestInit } from '@vercel/fetch' import { CommerceAPI, CommerceAPIConfig, @@ -35,7 +34,14 @@ export interface BigcommerceConfig extends CommerceAPIConfig { storeUrl?: string storeApiClientSecret?: string storeHash?: string - storeApiFetch(endpoint: string, options?: RequestInit): Promise + storeApiFetch( + endpoint: string, + options?: { + method?: string + body?: any + headers?: HeadersInit + } + ): Promise } const API_URL = process.env.BIGCOMMERCE_STOREFRONT_API_URL // GraphAPI diff --git a/packages/bigcommerce/src/api/operations/get-all-pages.ts b/packages/bigcommerce/src/api/operations/get-all-pages.ts index 3117b73fc..97575d5b7 100644 --- a/packages/bigcommerce/src/api/operations/get-all-pages.ts +++ b/packages/bigcommerce/src/api/operations/get-all-pages.ts @@ -2,10 +2,13 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { Page, GetAllPagesOperation } from '../../types/page' +import type { GetAllPagesOperation } from '@vercel/commerce/types/page' import type { RecursivePartial, RecursiveRequired } from '../utils/types' import { BigcommerceConfig, Provider } from '..' +import { definitions } from '../definitions/store-content' +import { normalizePage } from '../../lib/normalize' + export default function getAllPagesOperation({ commerce, }: OperationContext) { @@ -33,12 +36,14 @@ export default function getAllPagesOperation({ // RecursivePartial forces the method to check for every prop in the data, which is // required in case there's a custom `url` const { data } = await cfg.storeApiFetch< - RecursivePartial<{ data: Page[] }> + RecursivePartial<{ data: definitions['page_Full'][] }> >('/v3/content/pages') const pages = (data as RecursiveRequired) ?? [] return { - pages: preview ? pages : pages.filter((p) => p.is_visible), + pages: preview + ? pages.map(normalizePage) + : pages.filter((p) => p.is_visible).map(normalizePage), } } diff --git a/packages/bigcommerce/src/api/operations/get-all-product-paths.ts b/packages/bigcommerce/src/api/operations/get-all-product-paths.ts index 90cdab6fd..6c56ea692 100644 --- a/packages/bigcommerce/src/api/operations/get-all-product-paths.ts +++ b/packages/bigcommerce/src/api/operations/get-all-product-paths.ts @@ -3,7 +3,7 @@ import type { OperationOptions, } from '@vercel/commerce/api/operations' import type { GetAllProductPathsQuery } from '../../../schema' -import type { GetAllProductPathsOperation } from '../../types/product' +import type { GetAllProductPathsOperation } from '@vercel/commerce/types/product' import type { RecursivePartial, RecursiveRequired } from '../utils/types' import filterEdges from '../utils/filter-edges' import { BigcommerceConfig, Provider } from '..' diff --git a/packages/bigcommerce/src/api/operations/get-all-products.ts b/packages/bigcommerce/src/api/operations/get-all-products.ts index 2833ffcd7..4ec3baba4 100644 --- a/packages/bigcommerce/src/api/operations/get-all-products.ts +++ b/packages/bigcommerce/src/api/operations/get-all-products.ts @@ -6,7 +6,7 @@ import type { GetAllProductsQuery, GetAllProductsQueryVariables, } from '../../../schema' -import type { GetAllProductsOperation } from '../../types/product' +import type { GetAllProductsOperation } from '@vercel/commerce/types/product' import type { RecursivePartial, RecursiveRequired } from '../utils/types' import filterEdges from '../utils/filter-edges' import setProductLocaleMeta from '../utils/set-product-locale-meta' diff --git a/packages/bigcommerce/src/api/operations/get-customer-wishlist.ts b/packages/bigcommerce/src/api/operations/get-customer-wishlist.ts index 25e2157e1..c7ff1697f 100644 --- a/packages/bigcommerce/src/api/operations/get-customer-wishlist.ts +++ b/packages/bigcommerce/src/api/operations/get-customer-wishlist.ts @@ -2,13 +2,11 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { - GetCustomerWishlistOperation, - Wishlist, -} from '../../types/wishlist' -import type { RecursivePartial, RecursiveRequired } from '../utils/types' +import type { GetCustomerWishlistOperation } from '@vercel/commerce/types/wishlist' +import type { RecursivePartial, BCWishlist } from '../utils/types' import { BigcommerceConfig, Provider } from '..' -import getAllProducts, { ProductEdge } from './get-all-products' +import { ProductEdge } from './get-all-products' +import { normalizeWishlist } from '../../lib/normalize' export default function getCustomerWishlistOperation({ commerce, @@ -41,18 +39,22 @@ export default function getCustomerWishlistOperation({ }): Promise { config = commerce.getConfig(config) - const { data = [] } = await config.storeApiFetch< - RecursivePartial<{ data: Wishlist[] }> - >(`/v3/wishlists?customer_id=${variables.customerId}`) + const { data = [] } = await config.storeApiFetch<{ data: BCWishlist[] }>( + `/v3/wishlists?customer_id=${variables.customerId}` + ) const wishlist = data[0] if (includeProducts && wishlist?.items?.length) { - const ids = wishlist.items - ?.map((item) => (item?.product_id ? String(item?.product_id) : null)) - .filter((id): id is string => !!id) + const ids = [] - if (ids?.length) { + for (const wishlistItem of wishlist.items) { + if (wishlistItem.product_id) { + ids.push(String(wishlistItem.product_id)) + } + } + + if (ids.length) { const graphqlData = await commerce.getAllProducts({ variables: { first: 50, ids }, config, @@ -66,7 +68,7 @@ export default function getCustomerWishlistOperation({ }, {}) // Populate the wishlist items with the graphql products wishlist.items.forEach((item) => { - const product = item && productsById[item.product_id!] + const product = item && productsById[Number(item.product_id)] if (item && product) { // @ts-ignore Fix this type when the wishlist type is properly defined item.product = product @@ -75,7 +77,7 @@ export default function getCustomerWishlistOperation({ } } - return { wishlist: wishlist as RecursiveRequired } + return { wishlist: wishlist && normalizeWishlist(wishlist) } } return getCustomerWishlist diff --git a/packages/bigcommerce/src/api/operations/get-page.ts b/packages/bigcommerce/src/api/operations/get-page.ts index dc38e5088..4a72c5a29 100644 --- a/packages/bigcommerce/src/api/operations/get-page.ts +++ b/packages/bigcommerce/src/api/operations/get-page.ts @@ -2,7 +2,7 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { GetPageOperation, Page } from '../../types/page' +import type { GetPageOperation, Page } from '@vercel/commerce/types/page' import type { RecursivePartial, RecursiveRequired } from '../utils/types' import type { BigcommerceConfig, Provider } from '..' import { normalizePage } from '../../lib/normalize' diff --git a/packages/bigcommerce/src/api/operations/get-product.ts b/packages/bigcommerce/src/api/operations/get-product.ts index c7457de2a..534d173c7 100644 --- a/packages/bigcommerce/src/api/operations/get-product.ts +++ b/packages/bigcommerce/src/api/operations/get-product.ts @@ -2,7 +2,7 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { GetProductOperation } from '../../types/product' +import type { GetProductOperation } from '@vercel/commerce/types/product' import type { GetProductQuery, GetProductQueryVariables } from '../../../schema' import setProductLocaleMeta from '../utils/set-product-locale-meta' import { productInfoFragment } from '../fragments/product' @@ -100,7 +100,7 @@ export default function getAllProductPathsOperation({ const variables: GetProductQueryVariables = { locale, hasLocale: !!locale, - path: slug ? `/${slug}/` : vars.path!, + path: slug ? `/${slug}` : vars.path!, } const { data } = await config.fetch(query, { variables }) const product = data.site?.route?.node diff --git a/packages/bigcommerce/src/api/operations/get-site-info.ts b/packages/bigcommerce/src/api/operations/get-site-info.ts index ad0dd5ebd..d7bc70355 100644 --- a/packages/bigcommerce/src/api/operations/get-site-info.ts +++ b/packages/bigcommerce/src/api/operations/get-site-info.ts @@ -2,12 +2,12 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { GetSiteInfoOperation } from '../../types/site' +import type { GetSiteInfoOperation } from '@vercel/commerce/types/site' import type { GetSiteInfoQuery } from '../../../schema' import filterEdges from '../utils/filter-edges' import type { BigcommerceConfig, Provider } from '..' import { categoryTreeItemFragment } from '../fragments/category-tree' -import { normalizeCategory } from '../../lib/normalize' +import { normalizeBrand, normalizeCategory } from '../../lib/normalize' // Get 3 levels of categories export const getSiteInfoQuery = /* GraphQL */ ` @@ -79,7 +79,7 @@ export default function getSiteInfoOperation({ return { categories: categories ?? [], - brands: filterEdges(brands), + brands: filterEdges(brands).map(normalizeBrand), } } diff --git a/packages/bigcommerce/src/api/operations/login.ts b/packages/bigcommerce/src/api/operations/login.ts index f5349998f..da63e21f0 100644 --- a/packages/bigcommerce/src/api/operations/login.ts +++ b/packages/bigcommerce/src/api/operations/login.ts @@ -1,12 +1,10 @@ -import type { ServerResponse } from 'http' import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { LoginOperation } from '../../types/login' +import type { LoginOperation } from '@vercel/commerce/types/login' import type { LoginMutation } from '../../../schema' import type { RecursivePartial } from '../utils/types' -import concatHeader from '../utils/concat-cookie' import type { BigcommerceConfig, Provider } from '..' export const loginMutation = /* GraphQL */ ` @@ -23,26 +21,23 @@ export default function loginOperation({ async function login(opts: { variables: T['variables'] config?: BigcommerceConfig - res: ServerResponse }): Promise async function login( opts: { variables: T['variables'] config?: BigcommerceConfig - res: ServerResponse } & OperationOptions ): Promise async function login({ query = loginMutation, variables, - res: response, config, }: { query?: string variables: T['variables'] - res: ServerResponse + config?: BigcommerceConfig }): Promise { config = commerce.getConfig(config) @@ -51,6 +46,9 @@ export default function loginOperation({ query, { variables } ) + + const headers = new Headers() + // Bigcommerce returns a Set-Cookie header with the auth cookie let cookie = res.headers.get('Set-Cookie') @@ -64,14 +62,13 @@ export default function loginOperation({ cookie = cookie.replace(/; SameSite=none/gi, '; SameSite=lax') } - response.setHeader( - 'Set-Cookie', - concatHeader(response.getHeader('Set-Cookie'), cookie)! - ) + headers.set('Set-Cookie', cookie) } return { result: data.login?.result, + headers, + status: res.status, } } diff --git a/packages/bigcommerce/src/api/utils/concat-cookie.ts b/packages/bigcommerce/src/api/utils/concat-cookie.ts index 362e12e99..7d4e0d429 100644 --- a/packages/bigcommerce/src/api/utils/concat-cookie.ts +++ b/packages/bigcommerce/src/api/utils/concat-cookie.ts @@ -1,4 +1,4 @@ -type Header = string | number | string[] | undefined +type Header = string | number | string[] | undefined | null export default function concatHeader(prev: Header, val: Header) { if (!val) return prev diff --git a/packages/bigcommerce/src/api/utils/errors.ts b/packages/bigcommerce/src/api/utils/errors.ts index 77e2007fc..bd7a995d8 100644 --- a/packages/bigcommerce/src/api/utils/errors.ts +++ b/packages/bigcommerce/src/api/utils/errors.ts @@ -1,5 +1,3 @@ -import type { Response } from '@vercel/fetch' - // Used for GraphQL errors export class BigcommerceGraphQLError extends Error {} diff --git a/packages/bigcommerce/src/api/utils/fetch-graphql-api.ts b/packages/bigcommerce/src/api/utils/fetch-graphql-api.ts index ad385fee6..e860cb714 100644 --- a/packages/bigcommerce/src/api/utils/fetch-graphql-api.ts +++ b/packages/bigcommerce/src/api/utils/fetch-graphql-api.ts @@ -1,22 +1,26 @@ import { FetcherError } from '@vercel/commerce/utils/errors' -import type { GraphQLFetcher } from '@vercel/commerce/api' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import type { BigcommerceConfig } from '../index' -import fetch from './fetch' const fetchGraphqlApi: (getConfig: () => BigcommerceConfig) => GraphQLFetcher = (getConfig) => - async (query: string, { variables, preview } = {}, fetchOptions) => { + async ( + query: string, + { variables, preview } = {}, + options?: FetchOptions + ): Promise => { // log.warn(query) const config = getConfig() + const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { - ...fetchOptions, - method: 'POST', + method: options?.method || 'POST', headers: { Authorization: `Bearer ${config.apiToken}`, - ...fetchOptions?.headers, + ...options?.headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ + ...options?.body, query, variables, }), diff --git a/packages/bigcommerce/src/api/utils/fetch-store-api.ts b/packages/bigcommerce/src/api/utils/fetch-store-api.ts index a44e8957b..76193f424 100644 --- a/packages/bigcommerce/src/api/utils/fetch-store-api.ts +++ b/packages/bigcommerce/src/api/utils/fetch-store-api.ts @@ -1,11 +1,16 @@ -import type { FetchOptions, Response } from '@vercel/fetch' import type { BigcommerceConfig } from '../index' import { BigcommerceApiError, BigcommerceNetworkError } from './errors' -import fetch from './fetch' const fetchStoreApi = (getConfig: () => BigcommerceConfig) => - async (endpoint: string, options?: FetchOptions): Promise => { + async ( + endpoint: string, + options?: { + method?: string + body?: any + headers?: HeadersInit + } + ): Promise => { const config = getConfig() let res: Response diff --git a/packages/bigcommerce/src/api/utils/parse-item.ts b/packages/bigcommerce/src/api/utils/parse-item.ts index bb59a6ec4..324d13a85 100644 --- a/packages/bigcommerce/src/api/utils/parse-item.ts +++ b/packages/bigcommerce/src/api/utils/parse-item.ts @@ -1,5 +1,5 @@ -import type { WishlistItemBody } from '../../types/wishlist' -import type { CartItemBody, OptionSelections } from '../../types/cart' +import type { WishlistItemBody } from '@vercel/commerce/types/wishlist' +import type { CartItemBody, SelectedOption } from '@vercel/commerce/types/cart' type BCWishlistItemBody = { product_id: number @@ -10,7 +10,7 @@ type BCCartItemBody = { product_id: number variant_id: number quantity?: number - option_selections?: OptionSelections[] + option_selections?: SelectedOption[] } export const parseWishlistItem = ( @@ -24,5 +24,5 @@ export const parseCartItem = (item: CartItemBody): BCCartItemBody => ({ quantity: item.quantity, product_id: Number(item.productId), variant_id: Number(item.variantId), - option_selections: item.optionSelections, + option_selections: item.optionsSelected, }) diff --git a/packages/bigcommerce/src/api/utils/types.ts b/packages/bigcommerce/src/api/utils/types.ts index 56f9c1728..9a75cda55 100644 --- a/packages/bigcommerce/src/api/utils/types.ts +++ b/packages/bigcommerce/src/api/utils/types.ts @@ -5,3 +5,15 @@ export type RecursivePartial = { export type RecursiveRequired = { [P in keyof T]-?: RecursiveRequired } + +export interface BCWishlist { + id: number + items: { + id: number + customer_id: number + is_public: boolean + product_id: number + variant_id: number + }[] + token: string +} diff --git a/packages/bigcommerce/src/auth/use-login.tsx b/packages/bigcommerce/src/auth/use-login.tsx index a71f15983..2e7bade2e 100644 --- a/packages/bigcommerce/src/auth/use-login.tsx +++ b/packages/bigcommerce/src/auth/use-login.tsx @@ -2,14 +2,14 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' import useLogin, { UseLogin } from '@vercel/commerce/auth/use-login' -import type { LoginHook } from '../types/login' +import type { LoginHook } from '@vercel/commerce/types/login' import useCustomer from '../customer/use-customer' export default useLogin as UseLogin export const handler: MutationHook = { fetchOptions: { - url: '/api/login', + url: '/api/commerce/login', method: 'POST', }, async fetcher({ input: { email, password }, options, fetch }) { diff --git a/packages/bigcommerce/src/auth/use-logout.tsx b/packages/bigcommerce/src/auth/use-logout.tsx index bc5c3a4c0..a18f4ded9 100644 --- a/packages/bigcommerce/src/auth/use-logout.tsx +++ b/packages/bigcommerce/src/auth/use-logout.tsx @@ -1,14 +1,14 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import useLogout, { UseLogout } from '@vercel/commerce/auth/use-logout' -import type { LogoutHook } from '../types/logout' +import type { LogoutHook } from '@vercel/commerce/types/logout' import useCustomer from '../customer/use-customer' export default useLogout as UseLogout export const handler: MutationHook = { fetchOptions: { - url: '/api/logout', + url: '/api/commerce/logout', method: 'GET', }, useHook: diff --git a/packages/bigcommerce/src/auth/use-signup.tsx b/packages/bigcommerce/src/auth/use-signup.tsx index b06126df6..c8f848907 100644 --- a/packages/bigcommerce/src/auth/use-signup.tsx +++ b/packages/bigcommerce/src/auth/use-signup.tsx @@ -1,15 +1,15 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' -import useSignup, { UseSignup } from '@vercel/commerce/auth/use-signup' -import type { SignupHook } from '../types/signup' +import useSignup, { type UseSignup } from '@vercel/commerce/auth/use-signup' +import type { SignupHook } from '@vercel/commerce/types/signup' import useCustomer from '../customer/use-customer' export default useSignup as UseSignup export const handler: MutationHook = { fetchOptions: { - url: '/api/signup', + url: '/api/commerce/signup', method: 'POST', }, async fetcher({ diff --git a/packages/bigcommerce/src/cart/use-add-item.tsx b/packages/bigcommerce/src/cart/use-add-item.tsx index f65e82bc7..028bea621 100644 --- a/packages/bigcommerce/src/cart/use-add-item.tsx +++ b/packages/bigcommerce/src/cart/use-add-item.tsx @@ -9,7 +9,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'POST', }, async fetcher({ input: item, options, fetch }) { @@ -33,7 +33,6 @@ export const handler: MutationHook = { ({ fetch }) => () => { const { mutate } = useCart() - return useCallback( async function addItem(input) { const data = await fetch({ input }) diff --git a/packages/bigcommerce/src/cart/use-cart.tsx b/packages/bigcommerce/src/cart/use-cart.tsx index f8c4691bf..24c0a0764 100644 --- a/packages/bigcommerce/src/cart/use-cart.tsx +++ b/packages/bigcommerce/src/cart/use-cart.tsx @@ -7,7 +7,7 @@ export default useCart as UseCart export const handler: SWRHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'GET', }, useHook: diff --git a/packages/bigcommerce/src/cart/use-remove-item.tsx b/packages/bigcommerce/src/cart/use-remove-item.tsx index 8bea34f41..74f893ccb 100644 --- a/packages/bigcommerce/src/cart/use-remove-item.tsx +++ b/packages/bigcommerce/src/cart/use-remove-item.tsx @@ -4,8 +4,14 @@ import type { HookFetcherContext, } from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useRemoveItem, { UseRemoveItem } from '@vercel/commerce/cart/use-remove-item' -import type { Cart, LineItem, RemoveItemHook } from '@vercel/commerce/types/cart' +import useRemoveItem, { + UseRemoveItem, +} from '@vercel/commerce/cart/use-remove-item' +import type { + Cart, + LineItem, + RemoveItemHook, +} from '@vercel/commerce/types/cart' import useCart from './use-cart' export type RemoveItemFn = T extends LineItem @@ -20,7 +26,7 @@ export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'DELETE', }, async fetcher({ diff --git a/packages/bigcommerce/src/cart/use-update-item.tsx b/packages/bigcommerce/src/cart/use-update-item.tsx index b15690ed7..f5bfbc410 100644 --- a/packages/bigcommerce/src/cart/use-update-item.tsx +++ b/packages/bigcommerce/src/cart/use-update-item.tsx @@ -5,7 +5,9 @@ import type { HookFetcherContext, } from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useUpdateItem, { UseUpdateItem } from '@vercel/commerce/cart/use-update-item' +import useUpdateItem, { + UseUpdateItem, +} from '@vercel/commerce/cart/use-update-item' import type { LineItem, UpdateItemHook } from '@vercel/commerce/types/cart' import { handler as removeItemHandler } from './use-remove-item' import useCart from './use-cart' @@ -18,7 +20,7 @@ export default useUpdateItem as UseUpdateItem export const handler = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'PUT', }, async fetcher({ diff --git a/packages/bigcommerce/src/customer/use-customer.tsx b/packages/bigcommerce/src/customer/use-customer.tsx index 36bf88617..182aee2cc 100644 --- a/packages/bigcommerce/src/customer/use-customer.tsx +++ b/packages/bigcommerce/src/customer/use-customer.tsx @@ -1,12 +1,14 @@ -import { SWRHook } from '@vercel/commerce/utils/types' -import useCustomer, { UseCustomer } from '@vercel/commerce/customer/use-customer' -import type { CustomerHook } from '../types/customer' +import type { SWRHook } from '@vercel/commerce/utils/types' +import useCustomer, { + type UseCustomer, +} from '@vercel/commerce/customer/use-customer' +import type { CustomerHook } from '@vercel/commerce/types/customer' export default useCustomer as UseCustomer export const handler: SWRHook = { fetchOptions: { - url: '/api/customer', + url: '/api/commerce/customer', method: 'GET', }, async fetcher({ options, fetch }) { diff --git a/packages/bigcommerce/src/index.tsx b/packages/bigcommerce/src/index.tsx index a7de60924..eba1e4205 100644 --- a/packages/bigcommerce/src/index.tsx +++ b/packages/bigcommerce/src/index.tsx @@ -1,4 +1,7 @@ -import { getCommerceProvider, useCommerce as useCoreCommerce } from '@vercel/commerce' +import { + getCommerceProvider, + useCommerce as useCoreCommerce, +} from '@vercel/commerce' import { bigcommerceProvider, BigcommerceProvider } from './provider' export { bigcommerceProvider } diff --git a/packages/bigcommerce/src/lib/normalize.ts b/packages/bigcommerce/src/lib/normalize.ts index 059e3f871..885694122 100644 --- a/packages/bigcommerce/src/lib/normalize.ts +++ b/packages/bigcommerce/src/lib/normalize.ts @@ -1,10 +1,14 @@ -import type { Product } from '../types/product' -import type { Cart, BigcommerceCart, LineItem } from '../types/cart' -import type { Page } from '../types/page' -import type { BCCategory, Category } from '../types/site' -import { definitions } from '../api/definitions/store-content' -import update from './immutability' +import type { Page } from '@vercel/commerce/types/page' +import type { Product } from '@vercel/commerce/types/product' +import type { Cart, LineItem } from '@vercel/commerce/types/cart' +import type { Category, Brand } from '@vercel/commerce/types/site' +import type { BigcommerceCart, BCCategory, BCBrand } from '../types' +import type { ProductNode } from '../api/operations/get-all-products' +import type { definitions } from '../api/definitions/store-content' +import type { BCWishlist } from '../api/utils/types' + import getSlug from './get-slug' +import { Wishlist } from '@vercel/commerce/types/wishlist' function normalizeProductOption(productOption: any) { const { @@ -12,61 +16,50 @@ function normalizeProductOption(productOption: any) { } = productOption return { - id: entityId, + id: String(entityId), values: edges?.map(({ node }: any) => node), ...rest, } } -export function normalizeProduct(productNode: any): Product { +export function normalizeProduct(productNode: ProductNode): Product { const { entityId: id, productOptions, prices, path, - id: _, - options: _0, + images, + variants, } = productNode - return update(productNode, { - id: { $set: String(id) }, - images: { - $apply: ({ edges }: any) => - edges?.map(({ node: { urlOriginal, altText, ...rest } }: any) => ({ - url: urlOriginal, - alt: altText, - ...rest, - })), - }, - variants: { - $apply: ({ edges }: any) => - edges?.map(({ node: { entityId, productOptions, ...rest } }: any) => ({ - id: entityId, + return { + id: String(id), + name: productNode.name, + description: productNode.description, + images: + images.edges?.map(({ node: { urlOriginal, altText, ...rest } }: any) => ({ + url: urlOriginal, + alt: altText, + ...rest, + })) || [], + path: `/${getSlug(path)}`, + variants: + variants.edges?.map( + ({ node: { entityId, productOptions, ...rest } }: any) => ({ + id: String(entityId), options: productOptions?.edges ? productOptions.edges.map(normalizeProductOption) : [], ...rest, - })), - }, - options: { - $set: productOptions.edges - ? productOptions?.edges.map(normalizeProductOption) - : [], - }, - brand: { - $apply: (brand: any) => (brand?.entityId ? brand?.entityId : null), - }, - slug: { - $set: path?.replace(/^\/+|\/+$/g, ''), - }, + }) + ) || [], + options: productOptions?.edges?.map(normalizeProductOption) || [], + slug: path?.replace(/^\/+|\/+$/g, ''), price: { - $set: { - value: prices?.price.value, - currencyCode: prices?.price.currencyCode, - }, + value: prices?.price.value, + currencyCode: prices?.price.currencyCode, }, - $unset: ['entityId'], - }) + } } export function normalizePage(page: definitions['page_Full']): Page { @@ -75,7 +68,8 @@ export function normalizePage(page: definitions['page_Full']): Page { name: page.name, is_visible: page.is_visible, sort_order: page.sort_order, - body: page.body, + body: page.body ?? '', + url: page.url, } } @@ -119,7 +113,7 @@ function normalizeLineItem(item: any): LineItem { listPrice: item.list_price, }, options: item.options, - path: item.url.split('/')[3], + path: `/${item.url.split('/')[3]}`, discounts: item.discounts.map((discount: any) => ({ value: discount.discounted_amount, })), @@ -134,3 +128,27 @@ export function normalizeCategory(category: BCCategory): Category { path: category.path, } } + +export function normalizeBrand(brand: BCBrand): Brand { + const path = brand.node.path.replace('/brands/', '') + const slug = getSlug(path) + return { + id: `${brand.node.entityId}`, + name: brand.node.name, + slug, + path: `/${slug}`, + } +} + +export function normalizeWishlist(wishlist: BCWishlist): Wishlist { + return { + id: String(wishlist.id), + token: wishlist.token, + items: wishlist.items.map((item: any) => ({ + id: String(item.id), + productId: String(item.product_id), + variantId: String(item.variant_id), + product: item.product, + })), + } +} diff --git a/packages/bigcommerce/src/product/use-search.tsx b/packages/bigcommerce/src/product/use-search.tsx index fd918e341..038fc9b7f 100644 --- a/packages/bigcommerce/src/product/use-search.tsx +++ b/packages/bigcommerce/src/product/use-search.tsx @@ -1,20 +1,20 @@ import { SWRHook } from '@vercel/commerce/utils/types' import useSearch, { UseSearch } from '@vercel/commerce/product/use-search' -import type { SearchProductsHook } from '../types/product' +import type { SearchProductsHook } from '@vercel/commerce/types/product' export default useSearch as UseSearch export type SearchProductsInput = { search?: string - categoryId?: number | string - brandId?: number + categoryId?: string + brandId?: string sort?: string locale?: string } export const handler: SWRHook = { fetchOptions: { - url: '/api/catalog/products', + url: '/api/commerce/catalog/products', method: 'GET', }, fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { @@ -24,7 +24,7 @@ export const handler: SWRHook = { if (search) url.searchParams.set('search', search) if (Number.isInteger(Number(categoryId))) url.searchParams.set('categoryId', String(categoryId)) - if (Number.isInteger(brandId)) + if (Number.isInteger(Number(brandId))) url.searchParams.set('brandId', String(brandId)) if (sort) url.searchParams.set('sort', sort) diff --git a/packages/bigcommerce/src/types.ts b/packages/bigcommerce/src/types.ts new file mode 100644 index 000000000..43b65557c --- /dev/null +++ b/packages/bigcommerce/src/types.ts @@ -0,0 +1,32 @@ +import type { GetSiteInfoQuery } from '../schema' + +export type BCCategory = NonNullable< + GetSiteInfoQuery['site']['categoryTree'] +>[0] + +export type BCBrand = NonNullable< + NonNullable[0] +> + +// TODO: this type should match: +// https://developer.bigcommerce.com/api-reference/cart-checkout/server-server-cart-api/cart/getacart#responses +export type BigcommerceCart = { + id: string + parent_id?: string + customer_id: number + email: string + currency: { code: string } + tax_included: boolean + base_amount: number + discount_amount: number + cart_amount: number + line_items: { + custom_items: any[] + digital_items: any[] + gift_certificates: any[] + physical_items: any[] + } + created_time: string + discounts?: { id: number; discounted_amount: number }[] + // TODO: add missing fields +} diff --git a/packages/bigcommerce/src/types/cart.ts b/packages/bigcommerce/src/types/cart.ts deleted file mode 100644 index 3b5d8288b..000000000 --- a/packages/bigcommerce/src/types/cart.ts +++ /dev/null @@ -1,66 +0,0 @@ -import * as Core from '@vercel/commerce/types/cart' - -export * from '@vercel/commerce/types/cart' - -// TODO: this type should match: -// https://developer.bigcommerce.com/api-reference/cart-checkout/server-server-cart-api/cart/getacart#responses -export type BigcommerceCart = { - id: string - parent_id?: string - customer_id: number - email: string - currency: { code: string } - tax_included: boolean - base_amount: number - discount_amount: number - cart_amount: number - line_items: { - custom_items: any[] - digital_items: any[] - gift_certificates: any[] - physical_items: any[] - } - created_time: string - discounts?: { id: number; discounted_amount: number }[] - // TODO: add missing fields -} - -/** - * Extend core cart types - */ - -export type Cart = Core.Cart & { - lineItems: Core.LineItem[] -} - -export type OptionSelections = { - option_id: number - option_value: number | string -} - -export type CartItemBody = Core.CartItemBody & { - productId: string // The product id is always required for BC - optionSelections?: OptionSelections[] -} - -export type CartTypes = { - cart: Cart - item: Core.LineItem - itemBody: CartItemBody -} - -export type CartHooks = Core.CartHooks - -export type GetCartHook = CartHooks['getCart'] -export type AddItemHook = CartHooks['addItem'] -export type UpdateItemHook = CartHooks['updateItem'] -export type RemoveItemHook = CartHooks['removeItem'] - -export type CartSchema = Core.CartSchema - -export type CartHandlers = Core.CartHandlers - -export type GetCartHandler = CartHandlers['getCart'] -export type AddItemHandler = CartHandlers['addItem'] -export type UpdateItemHandler = CartHandlers['updateItem'] -export type RemoveItemHandler = CartHandlers['removeItem'] diff --git a/packages/bigcommerce/src/types/checkout.ts b/packages/bigcommerce/src/types/checkout.ts deleted file mode 100644 index d139db685..000000000 --- a/packages/bigcommerce/src/types/checkout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/checkout' diff --git a/packages/bigcommerce/src/types/common.ts b/packages/bigcommerce/src/types/common.ts deleted file mode 100644 index 23b8daa11..000000000 --- a/packages/bigcommerce/src/types/common.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/common' diff --git a/packages/bigcommerce/src/types/customer.ts b/packages/bigcommerce/src/types/customer.ts deleted file mode 100644 index 6e66366be..000000000 --- a/packages/bigcommerce/src/types/customer.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as Core from '@vercel/commerce/types/customer' - -export * from '@vercel/commerce/types/customer' - -export type CustomerSchema = Core.CustomerSchema diff --git a/packages/bigcommerce/src/types/index.ts b/packages/bigcommerce/src/types/index.ts deleted file mode 100644 index 7ab0b7f64..000000000 --- a/packages/bigcommerce/src/types/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as Cart from './cart' -import * as Checkout from './checkout' -import * as Common from './common' -import * as Customer from './customer' -import * as Login from './login' -import * as Logout from './logout' -import * as Page from './page' -import * as Product from './product' -import * as Signup from './signup' -import * as Site from './site' -import * as Wishlist from './wishlist' - -export type { - Cart, - Checkout, - Common, - Customer, - Login, - Logout, - Page, - Product, - Signup, - Site, - Wishlist, -} diff --git a/packages/bigcommerce/src/types/login.ts b/packages/bigcommerce/src/types/login.ts deleted file mode 100644 index eff27ca46..000000000 --- a/packages/bigcommerce/src/types/login.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Core from '@vercel/commerce/types/login' -import type { LoginMutationVariables } from '../../schema' - -export * from '@vercel/commerce/types/login' - -export type LoginOperation = Core.LoginOperation & { - variables: LoginMutationVariables -} diff --git a/packages/bigcommerce/src/types/logout.ts b/packages/bigcommerce/src/types/logout.ts deleted file mode 100644 index 1de06f8dc..000000000 --- a/packages/bigcommerce/src/types/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/logout' diff --git a/packages/bigcommerce/src/types/page.ts b/packages/bigcommerce/src/types/page.ts deleted file mode 100644 index ccbc29f7b..000000000 --- a/packages/bigcommerce/src/types/page.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as Core from '@vercel/commerce/types/page' -export * from '@vercel/commerce/types/page' - -export type Page = Core.Page - -export type PageTypes = { - page: Page -} - -export type GetAllPagesOperation = Core.GetAllPagesOperation -export type GetPageOperation = Core.GetPageOperation diff --git a/packages/bigcommerce/src/types/product.ts b/packages/bigcommerce/src/types/product.ts deleted file mode 100644 index 72ca02f02..000000000 --- a/packages/bigcommerce/src/types/product.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/product' diff --git a/packages/bigcommerce/src/types/signup.ts b/packages/bigcommerce/src/types/signup.ts deleted file mode 100644 index 3f0d1af5a..000000000 --- a/packages/bigcommerce/src/types/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/signup' diff --git a/packages/bigcommerce/src/types/site.ts b/packages/bigcommerce/src/types/site.ts deleted file mode 100644 index 5c3074cc9..000000000 --- a/packages/bigcommerce/src/types/site.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as Core from '@vercel/commerce/types/site' -import type { GetSiteInfoQuery, GetSiteInfoQueryVariables } from '../../schema' - -export * from '@vercel/commerce/types/site' - -export type BCCategory = NonNullable< - GetSiteInfoQuery['site']['categoryTree'] ->[0] - -export type Brand = NonNullable< - NonNullable[0] -> - -export type SiteTypes = { - category: Core.Category - brand: Brand -} - -export type GetSiteInfoOperation = Core.GetSiteInfoOperation diff --git a/packages/bigcommerce/src/types/wishlist.ts b/packages/bigcommerce/src/types/wishlist.ts deleted file mode 100644 index 67cf58c26..000000000 --- a/packages/bigcommerce/src/types/wishlist.ts +++ /dev/null @@ -1,24 +0,0 @@ -import * as Core from '@vercel/commerce/types/wishlist' -import { definitions } from '../api/definitions/wishlist' -import type { ProductEdge } from '../api/operations/get-all-products' - -export * from '@vercel/commerce/types/wishlist' - -export type WishlistItem = NonNullable< - definitions['wishlist_Full']['items'] ->[0] & { - product?: ProductEdge['node'] -} - -export type Wishlist = Omit & { - items?: WishlistItem[] -} - -export type WishlistTypes = { - wishlist: Wishlist - itemBody: Core.WishlistItemBody -} - -export type WishlistSchema = Core.WishlistSchema -export type GetCustomerWishlistOperation = - Core.GetCustomerWishlistOperation diff --git a/packages/bigcommerce/src/wishlist/use-add-item.tsx b/packages/bigcommerce/src/wishlist/use-add-item.tsx index c9e237b0b..949955bd6 100644 --- a/packages/bigcommerce/src/wishlist/use-add-item.tsx +++ b/packages/bigcommerce/src/wishlist/use-add-item.tsx @@ -1,8 +1,10 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' -import useAddItem, { UseAddItem } from '@vercel/commerce/wishlist/use-add-item' -import type { AddItemHook } from '../types/wishlist' +import useAddItem, { + type UseAddItem, +} from '@vercel/commerce/wishlist/use-add-item' +import type { AddItemHook } from '@vercel/commerce/types/wishlist' import useCustomer from '../customer/use-customer' import useWishlist from './use-wishlist' @@ -10,7 +12,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'POST', }, useHook: diff --git a/packages/bigcommerce/src/wishlist/use-remove-item.tsx b/packages/bigcommerce/src/wishlist/use-remove-item.tsx index 40ca0da04..c1b3e8784 100644 --- a/packages/bigcommerce/src/wishlist/use-remove-item.tsx +++ b/packages/bigcommerce/src/wishlist/use-remove-item.tsx @@ -2,9 +2,9 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' import useRemoveItem, { - UseRemoveItem, + type UseRemoveItem, } from '@vercel/commerce/wishlist/use-remove-item' -import type { RemoveItemHook } from '../types/wishlist' +import type { RemoveItemHook } from '@vercel/commerce/types/wishlist' import useCustomer from '../customer/use-customer' import useWishlist from './use-wishlist' @@ -12,7 +12,7 @@ export default useRemoveItem as UseRemoveItem export const handler: MutationHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'DELETE', }, useHook: diff --git a/packages/bigcommerce/src/wishlist/use-wishlist.tsx b/packages/bigcommerce/src/wishlist/use-wishlist.tsx index 7882233f5..89ae69c38 100644 --- a/packages/bigcommerce/src/wishlist/use-wishlist.tsx +++ b/packages/bigcommerce/src/wishlist/use-wishlist.tsx @@ -1,16 +1,16 @@ import { useMemo } from 'react' import { SWRHook } from '@vercel/commerce/utils/types' import useWishlist, { - UseWishlist, + type UseWishlist, } from '@vercel/commerce/wishlist/use-wishlist' import useCustomer from '../customer/use-customer' -import type { GetWishlistHook } from '../types/wishlist' +import type { GetWishlistHook } from '@vercel/commerce/types/wishlist' export default useWishlist as UseWishlist export const handler: SWRHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'GET', }, async fetcher({ input: { customerId, includeProducts }, options, fetch }) { @@ -32,7 +32,7 @@ export const handler: SWRHook = { const { data: customer } = useCustomer() const response = useData({ input: [ - ['customerId', customer?.entityId], + ['customerId', customer?.id], ['includeProducts', input?.includeProducts], ], swrOptions: { diff --git a/packages/commerce/new-provider.md b/packages/commerce/new-provider.md index df6ec2cc6..8b5ca3caa 100644 --- a/packages/commerce/new-provider.md +++ b/packages/commerce/new-provider.md @@ -70,7 +70,10 @@ Then, open [/site/.env.template](/site/.env.template) and add the provider name Using BigCommerce as an example. The first thing to do is export a `CommerceProvider` component that includes a `provider` object with all the handlers that can be used for hooks: ```tsx -import { getCommerceProvider, useCommerce as useCoreCommerce } from '@vercel/commerce' +import { + getCommerceProvider, + useCommerce as useCoreCommerce, +} from '@vercel/commerce' import { bigcommerceProvider, BigcommerceProvider } from './provider' export { bigcommerceProvider } @@ -136,7 +139,7 @@ export default useCart as UseCart export const handler: SWRHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'GET', }, useHook: @@ -176,7 +179,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'POST', }, async fetcher({ input: item, options, fetch }) { @@ -214,25 +217,26 @@ export const handler: MutationHook = { ``` ## Showing progress and features + When creating a PR for a new provider, include this list in the PR description and mark the progress as you push so we can organize the code review. Not all points are required (but advised) so make sure to keep the list up to date. **Status** -* [ ] CommerceProvider -* [ ] Schema & TS types -* [ ] API Operations - Get all collections -* [ ] API Operations - Get all pages -* [ ] API Operations - Get all products -* [ ] API Operations - Get page -* [ ] API Operations - Get product -* [ ] API Operations - Get Shop Info (categories and vendors working — `vendors` query still a WIP PR on Reaction) -* [ ] Hook - Add Item -* [ ] Hook - Remove Item -* [ ] Hook - Update Item -* [ ] Hook - Get Cart (account-tied carts working, anonymous carts working, cart reconciliation working) -* [ ] Auth (based on a WIP PR on Reaction - still need to implement refresh tokens) -* [ ] Customer information -* [ ] Product attributes - Size, Colors -* [ ] Custom checkout -* [ ] Typing (in progress) -* [ ] Tests +- [ ] CommerceProvider +- [ ] Schema & TS types +- [ ] API Operations - Get all collections +- [ ] API Operations - Get all pages +- [ ] API Operations - Get all products +- [ ] API Operations - Get page +- [ ] API Operations - Get product +- [ ] API Operations - Get Shop Info (categories and vendors working — `vendors` query still a WIP PR on Reaction) +- [ ] Hook - Add Item +- [ ] Hook - Remove Item +- [ ] Hook - Update Item +- [ ] Hook - Get Cart (account-tied carts working, anonymous carts working, cart reconciliation working) +- [ ] Auth (based on a WIP PR on Reaction - still need to implement refresh tokens) +- [ ] Customer information +- [ ] Product attributes - Size, Colors +- [ ] Custom checkout +- [ ] Typing (in progress) +- [ ] Tests diff --git a/packages/commerce/package.json b/packages/commerce/package.json index 17343a8b2..8cc15458e 100644 --- a/packages/commerce/package.json +++ b/packages/commerce/package.json @@ -47,16 +47,17 @@ } }, "dependencies": { - "@vercel/fetch": "^6.1.1", + "@vercel/edge": "^0.0.4", "deepmerge": "^4.2.2", "import-cwd": "^3.0.0", "js-cookie": "^3.0.1", - "swr": "^1.2.0" + "swr": "^1.3.0", + "zod": "^3.19.1" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", @@ -64,15 +65,16 @@ "@taskr/watch": "^1.1.0", "@types/js-cookie": "^3.0.1", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "2.6.2", + "@types/react": "^18.0.14", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/commerce/src/api/endpoints/cart.ts b/packages/commerce/src/api/endpoints/cart.ts index abd5df492..b94aef915 100644 --- a/packages/commerce/src/api/endpoints/cart.ts +++ b/packages/commerce/src/api/endpoints/cart.ts @@ -1,60 +1,64 @@ -import type { CartSchema } from '../../types/cart' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' +import type { CartSchema } from '../../types/cart' -const cartEndpoint: GetAPISchema>['endpoint']['handler'] = - async (ctx) => { - const { req, res, handlers, config } = ctx +import { parse, getInput } from '../utils' +import validateHandlers from '../utils/validate-handlers' - if ( - !isAllowedOperation(req, res, { - GET: handlers['getCart'], - POST: handlers['addItem'], - PUT: handlers['updateItem'], - DELETE: handlers['removeItem'], - }) - ) { - return - } +import { + getCartBodySchema, + addItemBodySchema, + updateItemBodySchema, + removeItemBodySchema, + cartSchema, +} from '../../schemas/cart' - const { cookies } = req - const cartId = cookies[config.cartCookie] +const cartEndpoint: GetAPISchema< + any, + CartSchema +>['endpoint']['handler'] = async (ctx) => { + const { req, handlers, config } = ctx - try { - // Return current cart info - if (req.method === 'GET') { - const body = { cartId } - return await handlers['getCart']({ ...ctx, body }) - } + validateHandlers(req, { + GET: handlers['getCart'], + POST: handlers['addItem'], + PUT: handlers['updateItem'], + DELETE: handlers['removeItem'], + }) - // Create or add an item to the cart - if (req.method === 'POST') { - const body = { ...req.body, cartId } - return await handlers['addItem']({ ...ctx, body }) - } + const input = await getInput(req) - // Update item in cart - if (req.method === 'PUT') { - const body = { ...req.body, cartId } - return await handlers['updateItem']({ ...ctx, body }) - } + let output + const { cookies } = req + const cartId = cookies.get(config.cartCookie)?.value - // Remove an item from the cart - if (req.method === 'DELETE') { - const body = { ...req.body, cartId } - return await handlers['removeItem']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } + // Return current cart info + if (req.method === 'GET') { + const body = getCartBodySchema.parse({ cartId }) + output = await handlers['getCart']({ ...ctx, body }) } + // Create or add an item to the cart + if (req.method === 'POST') { + const body = addItemBodySchema.parse({ ...input, cartId }) + if (!body.item.quantity) { + body.item.quantity = 1 + } + output = await handlers['addItem']({ ...ctx, body }) + } + + // Update item in cart + if (req.method === 'PUT') { + const body = updateItemBodySchema.parse({ ...input, cartId }) + output = await handlers['updateItem']({ ...ctx, body }) + } + + // Remove an item from the cart + if (req.method === 'DELETE') { + const body = removeItemBodySchema.parse({ ...input, cartId }) + return await handlers['removeItem']({ ...ctx, body }) + } + + return output ? parse(output, cartSchema.nullish()) : { status: 405 } +} + export default cartEndpoint diff --git a/packages/commerce/src/api/endpoints/catalog/products.ts b/packages/commerce/src/api/endpoints/catalog/products.ts index d2a4794be..19d1723ee 100644 --- a/packages/commerce/src/api/endpoints/catalog/products.ts +++ b/packages/commerce/src/api/endpoints/catalog/products.ts @@ -1,31 +1,37 @@ -import type { ProductsSchema } from '../../../types/product' -import { CommerceAPIError } from '../../utils/errors' -import isAllowedOperation from '../../utils/is-allowed-operation' import type { GetAPISchema } from '../..' +import type { ProductsSchema } from '../../../types/product' + +import validateHandlers from '../../utils/validate-handlers' +import { + searchProductBodySchema, + searchProductsSchema, +} from '../../../schemas/product' +import { parse } from '../../utils' const productsEndpoint: GetAPISchema< any, ProductsSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers } = ctx + const { req, handlers } = ctx - if (!isAllowedOperation(req, res, { GET: handlers['getProducts'] })) { - return + validateHandlers(req, { GET: handlers['getProducts'] }) + const { searchParams } = new URL(req.url) + + const body = searchProductBodySchema.parse({ + search: searchParams.get('search') ?? undefined, + categoryId: searchParams.get('categoryId') ?? undefined, + brandId: searchParams.get('brandId') ?? undefined, + sort: searchParams.get('sort') ?? undefined, + }) + + const res = await handlers['getProducts']({ ...ctx, body }) + + res.headers = { + 'Cache-Control': 'max-age=0, s-maxage=3600, stale-while-revalidate, public', + ...res.headers, } - try { - const body = req.query - return await handlers['getProducts']({ ...ctx, body }) - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } + return parse(res, searchProductsSchema) } export default productsEndpoint diff --git a/packages/commerce/src/api/endpoints/checkout.ts b/packages/commerce/src/api/endpoints/checkout.ts index 0168e7065..7928cd0d1 100644 --- a/packages/commerce/src/api/endpoints/checkout.ts +++ b/packages/commerce/src/api/endpoints/checkout.ts @@ -1,49 +1,45 @@ -import type { CheckoutSchema } from '../../types/checkout' import type { GetAPISchema } from '..' +import type { CheckoutSchema } from '../../types/checkout' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' +import { + checkoutSchema, + getCheckoutBodySchema, + submitCheckoutBodySchema, +} from '../../schemas/checkout' + +import { parse, getInput } from '../utils' +import validateHandlers from '../utils/validate-handlers' const checkoutEndpoint: GetAPISchema< any, CheckoutSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx + const { req, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getCheckout'], - POST: handlers['submitCheckout'], - }) - ) { - return - } + validateHandlers(req, { + GET: handlers['getCheckout'], + POST: handlers['submitCheckout'], + }) const { cookies } = req - const cartId = cookies[config.cartCookie] + const cartId = cookies.get(config.cartCookie)?.value + const input = await getInput(req) - try { - // Create checkout - if (req.method === 'GET') { - const body = { ...req.body, cartId } - return await handlers['getCheckout']({ ...ctx, body }) - } - - // Create checkout - if (req.method === 'POST' && handlers['submitCheckout']) { - const body = { ...req.body, cartId } - return await handlers['submitCheckout']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + // Get checkout + if (req.method === 'GET') { + const body = getCheckoutBodySchema.parse({ ...input, cartId }) + const res = await handlers['getCheckout']({ ...ctx, body }) + return parse(res, checkoutSchema.optional()) } + + // Create checkout + if (req.method === 'POST' && handlers['submitCheckout']) { + const body = submitCheckoutBodySchema.parse({ ...input, cartId }) + const res = await handlers['submitCheckout']({ ...ctx, body }) + return parse(res, checkoutSchema.optional()) + } + + return { status: 405 } } export default checkoutEndpoint diff --git a/packages/commerce/src/api/endpoints/customer/address.ts b/packages/commerce/src/api/endpoints/customer/address.ts index d5ede697a..6e09ade8a 100644 --- a/packages/commerce/src/api/endpoints/customer/address.ts +++ b/packages/commerce/src/api/endpoints/customer/address.ts @@ -1,65 +1,68 @@ import type { CustomerAddressSchema } from '../../../types/customer/address' import type { GetAPISchema } from '../..' -import { CommerceAPIError } from '../../utils/errors' -import isAllowedOperation from '../../utils/is-allowed-operation' +import validateHandlers from '../../utils/validate-handlers' + +import { + addAddressBodySchema, + addressSchema, + deleteAddressBodySchema, + updateAddressBodySchema, +} from '../../../schemas/customer' + +import { parse, getInput } from '../../utils' +import { getCartBodySchema } from '../../../schemas/cart' + +// create a function that returns a function const customerShippingEndpoint: GetAPISchema< any, CustomerAddressSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx + const { req, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getAddresses'], - POST: handlers['addItem'], - PUT: handlers['updateItem'], - DELETE: handlers['removeItem'], - }) - ) { - return - } + validateHandlers(req, { + GET: handlers['getAddresses'], + POST: handlers['addItem'], + PUT: handlers['updateItem'], + DELETE: handlers['removeItem'], + }) + let output + const input = await getInput(req) const { cookies } = req // Cart id might be usefull for anonymous shopping - const cartId = cookies[config.cartCookie] + const cartId = cookies.get(config.cartCookie)?.value - try { - // Return customer addresses - if (req.method === 'GET') { - const body = { cartId } - return await handlers['getAddresses']({ ...ctx, body }) - } - - // Create or add an item to customer addresses list - if (req.method === 'POST') { - const body = { ...req.body, cartId } - return await handlers['addItem']({ ...ctx, body }) - } - - // Update item in customer addresses list - if (req.method === 'PUT') { - const body = { ...req.body, cartId } - return await handlers['updateItem']({ ...ctx, body }) - } - - // Remove an item from customer addresses list - if (req.method === 'DELETE') { - const body = { ...req.body, cartId } - return await handlers['removeItem']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + // Return customer addresses + if (req.method === 'GET') { + const body = getCartBodySchema.parse({ cartId }) + return parse( + await handlers['getAddresses']({ ...ctx, body }), + addressSchema + ) } + + // Create or add an item to customer addresses list + if (req.method === 'POST') { + const body = addAddressBodySchema.parse({ ...input, cartId }) + output = await handlers['addItem']({ ...ctx, body }) + } + + // Update item in customer addresses list + if (req.method === 'PUT') { + const body = updateAddressBodySchema.parse({ ...input, cartId }) + output = await handlers['updateItem']({ ...ctx, body }) + } + + // Remove an item from customer addresses list + if (req.method === 'DELETE') { + const body = deleteAddressBodySchema.parse({ ...input, cartId }) + return await handlers['removeItem']({ ...ctx, body }) + } + + return output ? parse(output, addressSchema) : { status: 405 } } export default customerShippingEndpoint diff --git a/packages/commerce/src/api/endpoints/customer/card.ts b/packages/commerce/src/api/endpoints/customer/card.ts index ad268cbb9..2135b4726 100644 --- a/packages/commerce/src/api/endpoints/customer/card.ts +++ b/packages/commerce/src/api/endpoints/customer/card.ts @@ -1,65 +1,67 @@ import type { CustomerCardSchema } from '../../../types/customer/card' import type { GetAPISchema } from '../..' -import { CommerceAPIError } from '../../utils/errors' -import isAllowedOperation from '../../utils/is-allowed-operation' +import { z } from 'zod' + +import { + cardSchema, + addCardBodySchema, + deleteCardBodySchema, + updateCardBodySchema, +} from '../../../schemas/customer' +import { parse, getInput } from '../../utils' + +import validateHandlers from '../../utils/validate-handlers' const customerCardEndpoint: GetAPISchema< any, CustomerCardSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx + const { req, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getCards'], - POST: handlers['addItem'], - PUT: handlers['updateItem'], - DELETE: handlers['removeItem'], - }) - ) { - return - } + validateHandlers(req, { + GET: handlers['getCards'], + POST: handlers['addItem'], + PUT: handlers['updateItem'], + DELETE: handlers['removeItem'], + }) + let output + const input = await getInput(req) const { cookies } = req // Cart id might be usefull for anonymous shopping - const cartId = cookies[config.cartCookie] + const cartId = cookies.get(config.cartCookie)?.value - try { - // Create or add a card - if (req.method === 'GET') { - const body = { ...req.body } - return await handlers['getCards']({ ...ctx, body }) - } - - // Create or add an item to customer cards - if (req.method === 'POST') { - const body = { ...req.body, cartId } - return await handlers['addItem']({ ...ctx, body }) - } - - // Update item in customer cards - if (req.method === 'PUT') { - const body = { ...req.body, cartId } - return await handlers['updateItem']({ ...ctx, body }) - } - - // Remove an item from customer cards - if (req.method === 'DELETE') { - const body = { ...req.body, cartId } - return await handlers['removeItem']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + // Create or add a card + if (req.method === 'GET') { + const body = { ...input } + return parse( + await handlers['getCards']({ ...ctx, body }), + z.array(cardSchema).optional() + ) } + + // Create or add an item to customer cards + if (req.method === 'POST') { + const body = addCardBodySchema.parse({ ...input, cartId }) + output = await handlers['addItem']({ ...ctx, body }) + } + + // Update item in customer cards + if (req.method === 'PUT') { + const body = updateCardBodySchema.parse({ ...input, cartId }) + output = await handlers['updateItem']({ ...ctx, body }) + } + + // Remove an item from customer cards + if (req.method === 'DELETE') { + const body = deleteCardBodySchema.parse({ ...input, cartId }) + + return await handlers['removeItem']({ ...ctx, body }) + } + + return output ? parse(output, cardSchema.nullish()) : { status: 405 } } export default customerCardEndpoint diff --git a/packages/commerce/src/api/endpoints/customer/index.ts b/packages/commerce/src/api/endpoints/customer/index.ts index eb2a048b7..f6145255a 100644 --- a/packages/commerce/src/api/endpoints/customer/index.ts +++ b/packages/commerce/src/api/endpoints/customer/index.ts @@ -1,36 +1,32 @@ import type { CustomerSchema } from '../../../types/customer' import type { GetAPISchema } from '../..' +import { z } from 'zod' +import { parse } from '../../utils' +import validateHandlers from '../../utils/validate-handlers' -import { CommerceAPIError } from '../../utils/errors' -import isAllowedOperation from '../../utils/is-allowed-operation' +import { customerSchema } from '../../../schemas/customer' const customerEndpoint: GetAPISchema< any, - CustomerSchema + CustomerSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers } = ctx + const { req, handlers } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getLoggedInCustomer'], - }) - ) { - return - } + validateHandlers(req, { + GET: handlers['getLoggedInCustomer'], + }) - try { - const body = null - return await handlers['getLoggedInCustomer']({ ...ctx, body }) - } catch (error) { - console.error(error) + const body = null + const output = await handlers['getLoggedInCustomer']({ ...ctx, body }) - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } + return output + ? parse( + output, + z.object({ + customer: customerSchema, + }) + ) + : { status: 204 } } export default customerEndpoint diff --git a/packages/commerce/src/api/endpoints/index.ts b/packages/commerce/src/api/endpoints/index.ts new file mode 100644 index 000000000..d5ed49ce9 --- /dev/null +++ b/packages/commerce/src/api/endpoints/index.ts @@ -0,0 +1,10 @@ +import edgeHandler from '../utils/edge-handler' +import nodeHandler from '../utils/node-handler' + +/** + * Next.js Commerce API endpoints handler. Based on the path, it will call the corresponding endpoint handler, + * exported from the `endpoints` folder of the provider. + * @param {CommerceAPI} commerce The Commerce API instance. + * @param endpoints An object containing the handlers for each endpoint. + */ +export default process.env.NEXT_RUNTIME === 'edge' ? edgeHandler : nodeHandler diff --git a/packages/commerce/src/api/endpoints/login.ts b/packages/commerce/src/api/endpoints/login.ts index 6f69629b1..565d0ab83 100644 --- a/packages/commerce/src/api/endpoints/login.ts +++ b/packages/commerce/src/api/endpoints/login.ts @@ -1,36 +1,25 @@ -import type { LoginSchema } from '../../types/login' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' +import type { LoginSchema } from '../../types/login' + +import { getInput } from '../utils' +import validateHandlers from '../utils/validate-handlers' + +import { loginBodySchema } from '../../schemas/auth' const loginEndpoint: GetAPISchema< any, - LoginSchema + LoginSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers } = ctx + const { req, handlers } = ctx - if ( - !isAllowedOperation(req, res, { - POST: handlers['login'], - GET: handlers['login'], - }) - ) { - return - } + validateHandlers(req, { + POST: handlers['login'], + GET: handlers['login'], + }) - try { - const body = req.body ?? {} - return await handlers['login']({ ...ctx, body }) - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } + const input = await getInput(req) + const body = loginBodySchema.parse(input) + return handlers['login']({ ...ctx, body }) } export default loginEndpoint diff --git a/packages/commerce/src/api/endpoints/logout.ts b/packages/commerce/src/api/endpoints/logout.ts index c2640eac3..9f9fe23de 100644 --- a/packages/commerce/src/api/endpoints/logout.ts +++ b/packages/commerce/src/api/endpoints/logout.ts @@ -1,35 +1,26 @@ -import type { LogoutSchema } from '../../types/logout' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' +import type { LogoutSchema } from '../../types/logout' -const logoutEndpoint: GetAPISchema['endpoint']['handler'] = - async (ctx) => { - const { req, res, handlers } = ctx +import { logoutBodySchema } from '../../schemas/auth' +import validateHandlers from '../utils/validate-handlers' - if ( - !isAllowedOperation(req, res, { - GET: handlers['logout'], - }) - ) { - return - } +const logoutEndpoint: GetAPISchema< + any, + LogoutSchema +>['endpoint']['handler'] = async (ctx) => { + const { req, handlers } = ctx - try { - const redirectTo = req.query.redirect_to - const body = typeof redirectTo === 'string' ? { redirectTo } : {} + validateHandlers(req, { + GET: handlers['logout'], + }) - return await handlers['logout']({ ...ctx, body }) - } catch (error) { - console.error(error) + const redirectTo = new URL(req.url).searchParams.get('redirectTo') - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' + const body = logoutBodySchema.parse( + typeof redirectTo === 'string' ? { redirectTo } : {} + ) - res.status(500).json({ data: null, errors: [{ message }] }) - } - } + return handlers['logout']({ ...ctx, body }) +} export default logoutEndpoint diff --git a/packages/commerce/src/api/endpoints/signup.ts b/packages/commerce/src/api/endpoints/signup.ts index 78c4cf588..789b36ffb 100644 --- a/packages/commerce/src/api/endpoints/signup.ts +++ b/packages/commerce/src/api/endpoints/signup.ts @@ -1,36 +1,27 @@ -import type { SignupSchema } from '../../types/signup' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' +import type { SignupSchema } from '../../types/signup' -const signupEndpoint: GetAPISchema['endpoint']['handler'] = - async (ctx) => { - const { req, res, handlers, config } = ctx +import { getInput } from '../utils' +import validateHandlers from '../utils/validate-handlers' - if ( - !isAllowedOperation(req, res, { - POST: handlers['signup'], - }) - ) { - return - } +import { signupBodySchema } from '../../schemas/auth' - const { cookies } = req - const cartId = cookies[config.cartCookie] +const signupEndpoint: GetAPISchema< + any, + SignupSchema +>['endpoint']['handler'] = async (ctx) => { + const { req, handlers, config } = ctx - try { - const body = { ...req.body, cartId } - return await handlers['signup']({ ...ctx, body }) - } catch (error) { - console.error(error) + validateHandlers(req, { + POST: handlers['signup'], + }) - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' + const input = await getInput(req) + const { cookies } = req + const cartId = cookies.get(config.cartCookie)?.value - res.status(500).json({ data: null, errors: [{ message }] }) - } - } + const body = signupBodySchema.parse({ ...input, cartId }) + return handlers['signup']({ ...ctx, body }) +} export default signupEndpoint diff --git a/packages/commerce/src/api/endpoints/wishlist.ts b/packages/commerce/src/api/endpoints/wishlist.ts index 233ac5294..4611f96b9 100644 --- a/packages/commerce/src/api/endpoints/wishlist.ts +++ b/packages/commerce/src/api/endpoints/wishlist.ts @@ -1,58 +1,58 @@ -import type { WishlistSchema } from '../../types/wishlist' -import { CommerceAPIError } from '../utils/errors' -import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' +import type { WishlistSchema } from '../../types/wishlist' + +import { parse, getInput } from '../utils' + +import { + wishlistSchema, + addItemBodySchema, + removeItemBodySchema, + getWishlistBodySchema, +} from '../../schemas/whishlist' + +import validateHandlers from '../utils/validate-handlers' const wishlistEndpoint: GetAPISchema< any, - WishlistSchema + WishlistSchema >['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx + const { req, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getWishlist'], - POST: handlers['addItem'], - DELETE: handlers['removeItem'], - }) - ) { - return - } + validateHandlers(req, { + GET: handlers['getWishlist'], + POST: handlers['addItem'], + DELETE: handlers['removeItem'], + }) + let output const { cookies } = req - const customerToken = cookies[config.customerCookie] + const input = await getInput(req) - try { - // Return current wishlist info - if (req.method === 'GET') { - const body = { - customerToken, - includeProducts: req.query.products === '1', - } - return await handlers['getWishlist']({ ...ctx, body }) - } + const customerToken = cookies.get(config.customerCookie)?.value + const products = new URL(req.url).searchParams.get('products') - // Add an item to the wishlist - if (req.method === 'POST') { - const body = { ...req.body, customerToken } - return await handlers['addItem']({ ...ctx, body }) - } - - // Remove an item from the wishlist - if (req.method === 'DELETE') { - const body = { ...req.body, customerToken } - return await handlers['removeItem']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + // Return current wishlist info + if (req.method === 'GET') { + const body = getWishlistBodySchema.parse({ + customerToken, + includeProducts: !!products, + }) + output = await handlers['getWishlist']({ ...ctx, body }) } + + // Add an item to the wishlist + if (req.method === 'POST') { + const body = addItemBodySchema.parse({ ...input, customerToken }) + output = await handlers['addItem']({ ...ctx, body }) + } + + // Remove an item from the wishlist + if (req.method === 'DELETE') { + const body = removeItemBodySchema.parse({ ...input, customerToken }) + output = await handlers['removeItem']({ ...ctx, body }) + } + + return output ? parse(output, wishlistSchema.optional()) : { status: 405 } } export default wishlistEndpoint diff --git a/packages/commerce/src/api/index.ts b/packages/commerce/src/api/index.ts index 6914b9364..dc4aeda40 100644 --- a/packages/commerce/src/api/index.ts +++ b/packages/commerce/src/api/index.ts @@ -1,6 +1,5 @@ -import type { NextApiHandler } from 'next' -import type { FetchOptions, Response } from '@vercel/fetch' -import type { APIEndpoint, APIHandler } from './utils/types' +import type { NextRequest } from 'next/server' +import type { APIEndpoint, APIHandler, APIResponse } from './utils/types' import type { CartSchema } from '../types/cart' import type { CustomerSchema } from '../types/customer' import type { LoginSchema } from '../types/login' @@ -11,11 +10,14 @@ import type { WishlistSchema } from '../types/wishlist' import type { CheckoutSchema } from '../types/checkout' import type { CustomerCardSchema } from '../types/customer/card' import type { CustomerAddressSchema } from '../types/customer/address' + +import { withOperationCallback } from './utils/with-operation-callback' + import { - defaultOperations, OPERATIONS, AllOperations, APIOperations, + defaultOperations, } from './operations' export type APISchemas = @@ -71,6 +73,12 @@ export type EndpointHandlers< > } +export type FetchOptions = { + method?: string + body?: Body + headers?: HeadersInit +} + export type APIProvider = { config: CommerceAPIConfig operations: APIOperations @@ -106,13 +114,18 @@ export function getCommerceApi

( OPERATIONS.forEach((k) => { const op = ops[k] if (op) { - commerce[k] = op({ commerce }) as AllOperations

[typeof k] + commerce[k] = withOperationCallback( + k, + op({ commerce }) + ) as AllOperations

[typeof k] } }) return commerce } +export type EndpointHandler = (req: NextRequest) => Promise + export function getEndpoint< P extends APIProvider, T extends GetAPISchema @@ -122,13 +135,11 @@ export function getEndpoint< config?: P['config'] options?: T['schema']['endpoint']['options'] } -): NextApiHandler { +): EndpointHandler { const cfg = commerce.getConfig(context.config) - - return function apiHandler(req, res) { + return function apiHandler(req) { return context.handler({ req, - res, commerce, config: cfg, handlers: context.handlers, @@ -145,7 +156,7 @@ export const createEndpoint = config?: P['config'] options?: API['schema']['endpoint']['options'] } - ): NextApiHandler => { + ): EndpointHandler => { return getEndpoint(commerce, { ...endpoint, ...context }) } @@ -160,7 +171,7 @@ export interface CommerceAPIConfig { fetch( query: string, queryData?: CommerceAPIFetchOptions, - fetchOptions?: FetchOptions + options?: FetchOptions ): Promise> } @@ -169,8 +180,7 @@ export type GraphQLFetcher< Variables = any > = ( query: string, - queryData?: CommerceAPIFetchOptions, - fetchOptions?: FetchOptions + queryData?: CommerceAPIFetchOptions ) => Promise export interface GraphQLFetcherResult { diff --git a/packages/commerce/src/api/operations.ts b/packages/commerce/src/api/operations.ts index 2910a2d82..7d4350f4d 100644 --- a/packages/commerce/src/api/operations.ts +++ b/packages/commerce/src/api/operations.ts @@ -1,4 +1,3 @@ -import type { ServerResponse } from 'http' import type { LoginOperation } from '../types/login' import type { GetAllPagesOperation, GetPageOperation } from '../types/page' import type { GetSiteInfoOperation } from '../types/site' @@ -25,6 +24,13 @@ export const OPERATIONS = [ 'getProduct', ] as const +export type Operation = { + [O in AllowedOperations]: { + name: O + data: Awaited[O]>> + } +}[AllowedOperations] + export const defaultOperations = OPERATIONS.reduce((ops, k) => { ops[k] = noop return ops @@ -37,14 +43,14 @@ export type Operations

= { (opts: { variables: T['variables'] config?: P['config'] - res: ServerResponse + res: Response }): Promise ( opts: { variables: T['variables'] config?: P['config'] - res: ServerResponse + res: Response } & OperationOptions ): Promise } diff --git a/packages/commerce/src/api/utils/edge-handler.ts b/packages/commerce/src/api/utils/edge-handler.ts new file mode 100644 index 000000000..c438bd9fc --- /dev/null +++ b/packages/commerce/src/api/utils/edge-handler.ts @@ -0,0 +1,81 @@ +import type { APIProvider, CommerceAPI, EndpointHandler } from '..' +import type { NextRequest } from 'next/server' + +import { normalizeApiError } from './errors' +import { transformHeaders } from '.' + +export default function edgeHandler

( + commerce: CommerceAPI

, + endpoints: Record) => EndpointHandler> +) { + const endpointsKeys = Object.keys(endpoints) + + const handlers = endpointsKeys.reduce>( + (acc, endpoint) => + Object.assign(acc, { + [endpoint]: endpoints[endpoint](commerce), + }), + {} + ) + + return async (req: NextRequest) => { + try { + const { pathname } = new URL(req.url) + + /** + * Get the current endpoint by removing the leading and trailing slash & base path. + * Csovers: /api/commerce/cart & /checkout + */ + const endpoint = pathname + .replace('/api/commerce/', '') + .replace(/^\/|\/$/g, '') + + // Check if the handler for this path exists and return a 404 if it doesn't + if (!endpointsKeys.includes(endpoint)) { + throw new Error( + `Endpoint "${endpoint}" not implemented. Please use one of the available api endpoints: ${endpointsKeys.join( + ', ' + )}` + ) + } + + /** + * Executes the handler for this endpoint, provided by the provider, + * parses the input body and returns the parsed output + */ + const output = await handlers[endpoint](req) + + // If the output is a Response, return it directly (E.g. checkout page & validateMethod util) + if (output instanceof Response) { + return output + } + + const headers = transformHeaders(output.headers) + + // If the output contains a redirectTo property, return a Response with the redirect + if (output.redirectTo) { + headers.append('Location', output.redirectTo) + return new Response(null, { + status: 302, + headers, + }) + } + + // Otherwise, return a JSON response with the output data or errors returned by the handler + const { data = null, errors, status } = output + return new Response(JSON.stringify({ data, errors }), { + status, + headers, + }) + } catch (error) { + const output = normalizeApiError(error) + if (output instanceof Response) { + return output + } + const { status = 500, ...rest } = output + return output instanceof Response + ? output + : new Response(JSON.stringify(rest), { status }) + } + } +} diff --git a/packages/commerce/src/api/utils/errors.ts b/packages/commerce/src/api/utils/errors.ts index 6f9ecce0c..227090c14 100644 --- a/packages/commerce/src/api/utils/errors.ts +++ b/packages/commerce/src/api/utils/errors.ts @@ -1,6 +1,9 @@ -import type { Response } from '@vercel/fetch' +import type { NextRequest } from 'next/server' -export class CommerceAPIError extends Error { +import { CommerceError } from '../../utils/errors' +import { ZodError } from 'zod' + +export class CommerceAPIResponseError extends Error { status: number res: Response data: any @@ -14,9 +17,85 @@ export class CommerceAPIError extends Error { } } +export class CommerceAPIError extends Error { + status: number + code: string + constructor( + msg: string, + options?: { + status?: number + code?: string + } + ) { + super(msg) + this.name = 'CommerceApiError' + this.status = options?.status || 500 + this.code = options?.code || 'api_error' + } +} + export class CommerceNetworkError extends Error { constructor(msg: string) { super(msg) this.name = 'CommerceNetworkError' } } + +export const normalizeZodIssues = (issues: ZodError['issues']) => + issues.map(({ path, message }) => + path.length ? `${message} at "${path.join('.')}" field` : message + ) + +export const getOperationError = (operation: string, error: unknown) => { + if (error instanceof ZodError) { + return new CommerceError({ + code: 'SCHEMA_VALIDATION_ERROR', + message: + `Validation ${ + error.issues.length === 1 ? 'error' : 'errors' + } at "${operation}" operation: \n` + + normalizeZodIssues(error.issues).join('\n'), + }) + } + return error +} + +export const normalizeApiError = (error: unknown, req?: NextRequest) => { + if (error instanceof CommerceAPIResponseError && error.res) { + return error.res + } + + req?.url && console.log(req.url) + + if (error instanceof ZodError) { + const message = 'Validation error, please check the input data!' + const errors = normalizeZodIssues(error.issues).map((message) => ({ + message, + })) + console.error(`${message}\n${errors.map((e) => e.message).join('\n')}`) + return { + status: 400, + data: null, + errors, + } + } + + console.error(error) + + if (error instanceof CommerceAPIError) { + return { + errors: [ + { + message: error.message, + code: error.code, + }, + ], + status: error.status, + } + } + + return { + data: null, + errors: [{ message: 'An unexpected error ocurred' }], + } +} diff --git a/packages/commerce/src/api/utils/index.ts b/packages/commerce/src/api/utils/index.ts new file mode 100644 index 000000000..fe222e39b --- /dev/null +++ b/packages/commerce/src/api/utils/index.ts @@ -0,0 +1,91 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import type { ZodSchema } from 'zod' +import type { APIResponse } from './types' + +import { NextRequest } from 'next/server' + +/** + * Parses the output data of the API handler and returns a valid APIResponse + * or throws an error if the data is invalid. + * @param res APIResponse + * @param parser ZodSchema + */ +export const parse = (res: APIResponse, parser: ZodSchema) => { + if (res.data) { + res.data = parser.parse(res.data) + } + return res +} + +/** + * Returns the body of the request as a JSON object. + * @param req NextRequest + */ +export const getInput = (req: NextRequest) => req.json().catch(() => ({})) + +/** + * Convert NextApiRequest to NextRequest + * @param req NextApiRequest + * @param path string + */ +export const transformRequest = (req: NextApiRequest) => { + const headers = new Headers() + let body + + for (let i = 0; i < req.rawHeaders.length; i += 2) { + headers.append(req.rawHeaders[i], req.rawHeaders[i + 1]) + } + + if ( + req.method === 'POST' || + req.method === 'PUT' || + req.method === 'DELETE' + ) { + body = JSON.stringify(req.body) + } + + // Get the url path & query string + const url = new URL(req.url || '/', `https://${req.headers.host}`) + + return new NextRequest(url, { + headers, + method: req.method, + body, + }) +} + +/** + * Sets the custom headers received in the APIResponse in the + * @param headers Record | Headers | undefined + * @returns Headers + */ +export const transformHeaders = ( + headers: Record | Headers = {} +) => { + if (headers instanceof Headers) { + return headers + } + + const newHeaders = new Headers() + + Object.entries(headers).forEach(([key, value]) => { + newHeaders.append(key, value as string) + }) + + return newHeaders +} + +export const setHeaders = ( + res: NextApiResponse, + headers: Record | Headers = {} +) => { + if (headers instanceof Headers) { + headers.forEach((value, key) => { + res.setHeader(key, value) + }) + } else { + Object.entries(headers).forEach(([key, value]) => { + res.setHeader(key, value) + }) + } +} diff --git a/packages/commerce/src/api/utils/is-allowed-method.ts b/packages/commerce/src/api/utils/is-allowed-method.ts deleted file mode 100644 index 51c37e221..000000000 --- a/packages/commerce/src/api/utils/is-allowed-method.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next' - -export type HTTP_METHODS = 'OPTIONS' | 'GET' | 'POST' | 'PUT' | 'DELETE' - -export default function isAllowedMethod( - req: NextApiRequest, - res: NextApiResponse, - allowedMethods: HTTP_METHODS[] -) { - const methods = allowedMethods.includes('OPTIONS') - ? allowedMethods - : [...allowedMethods, 'OPTIONS'] - - if (!req.method || !methods.includes(req.method)) { - res.status(405) - res.setHeader('Allow', methods.join(', ')) - res.end() - return false - } - - if (req.method === 'OPTIONS') { - res.status(200) - res.setHeader('Allow', methods.join(', ')) - res.setHeader('Content-Length', '0') - res.end() - return false - } - - return true -} diff --git a/packages/commerce/src/api/utils/is-allowed-operation.ts b/packages/commerce/src/api/utils/is-allowed-operation.ts deleted file mode 100644 index f507781bf..000000000 --- a/packages/commerce/src/api/utils/is-allowed-operation.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next' -import isAllowedMethod, { HTTP_METHODS } from './is-allowed-method' -import { APIHandler } from './types' - -export default function isAllowedOperation( - req: NextApiRequest, - res: NextApiResponse, - allowedOperations: { [k in HTTP_METHODS]?: APIHandler } -) { - const methods = Object.keys(allowedOperations) as HTTP_METHODS[] - const allowedMethods = methods.reduce((arr, method) => { - if (allowedOperations[method]) { - arr.push(method) - } - return arr - }, []) - - return isAllowedMethod(req, res, allowedMethods) -} diff --git a/packages/commerce/src/api/utils/node-handler.ts b/packages/commerce/src/api/utils/node-handler.ts new file mode 100644 index 000000000..158142d18 --- /dev/null +++ b/packages/commerce/src/api/utils/node-handler.ts @@ -0,0 +1,75 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import type { APIProvider, CommerceAPI, EndpointHandler } from '..' + +import { normalizeApiError } from './errors' +import { transformRequest, setHeaders } from '.' + +export default function nodeHandler

( + commerce: CommerceAPI

, + endpoints: { + [key: string]: (commerce: CommerceAPI

) => EndpointHandler + } +) { + const paths = Object.keys(endpoints) + + const handlers = paths.reduce>( + (acc, path) => + Object.assign(acc, { + [path]: endpoints[path](commerce), + }), + {} + ) + + return async (req: NextApiRequest, res: NextApiResponse) => { + try { + if (!req.query.commerce) { + throw new Error( + 'Invalid configuration. Please make sure that the /pages/api/commerce/[[...commerce]].ts route is configured correctly, and it passes the commerce instance.' + ) + } + + /** + * Get the url path + */ + const path = Array.isArray(req.query.commerce) + ? req.query.commerce.join('/') + : req.query.commerce + + // Check if the handler for this path exists and return a 404 if it doesn't + if (!paths.includes(path)) { + throw new Error( + `Endpoint handler not implemented. Please use one of the available api endpoints: ${paths.join( + ', ' + )}` + ) + } + + const output = await handlers[path](transformRequest(req)) + const { status, errors, data, redirectTo, headers } = output + + setHeaders(res, headers) + + if (output instanceof Response) { + return res.end(output.body) + } + + if (redirectTo) { + return res.redirect(redirectTo) + } + + res.status(status || 200).json({ + data, + errors, + }) + } catch (error) { + const output = normalizeApiError(error) + + if (output instanceof Response) { + return res.end(output.body) + } + + const { status = 500, ...rest } = output + res.status(status).json(rest) + } + } +} diff --git a/packages/commerce/src/api/utils/types.ts b/packages/commerce/src/api/utils/types.ts index 27a95df40..f048c60c1 100644 --- a/packages/commerce/src/api/utils/types.ts +++ b/packages/commerce/src/api/utils/types.ts @@ -1,14 +1,19 @@ -import type { NextApiRequest, NextApiResponse } from 'next' +import type { NextRequest } from 'next/server' import type { CommerceAPI } from '..' export type ErrorData = { message: string; code?: string } -export type APIResponse = - | { data: Data; errors?: ErrorData[] } - // If `data` doesn't include `null`, then `null` is only allowed on errors - | (Data extends null - ? { data: null; errors?: ErrorData[] } - : { data: null; errors: ErrorData[] }) +export type APIResponse = { + data?: Data + errors?: ErrorData[] + status?: number + headers?: Record | Headers + /** + * @type {string} + * @example redirectTo: '/cart' + */ + redirectTo?: string +} export type APIHandlerContext< C extends CommerceAPI, @@ -16,14 +21,10 @@ export type APIHandlerContext< Data = any, Options extends {} = {} > = { - req: NextApiRequest - res: NextApiResponse> + req: NextRequest commerce: C config: C['provider']['config'] handlers: H - /** - * Custom configs that may be used by a particular handler - */ options: Options } @@ -35,7 +36,7 @@ export type APIHandler< Options extends {} = {} > = ( context: APIHandlerContext & { body: Body } -) => void | Promise +) => Promise> export type APIHandlers = { [k: string]: APIHandler @@ -46,4 +47,6 @@ export type APIEndpoint< H extends APIHandlers = {}, Data = any, Options extends {} = {} -> = (context: APIHandlerContext) => void | Promise +> = ( + context: APIHandlerContext +) => Promise> diff --git a/packages/commerce/src/api/utils/validate-handlers.ts b/packages/commerce/src/api/utils/validate-handlers.ts new file mode 100644 index 000000000..3e4ed2ab7 --- /dev/null +++ b/packages/commerce/src/api/utils/validate-handlers.ts @@ -0,0 +1,24 @@ +import type { NextRequest } from 'next/server' +import type { APIHandler } from './types' +import validateMethod, { HTTP_METHODS } from './validate-method' +/** + * Validates the request method and throws an error if it's not allowed, or if the handler is not implemented. + * and stops the execution of the handler. + * @param req The request object. + * @param allowedOperations An object containing the handlers for each method. + * @throws Error when the method is not allowed or the handler is not implemented. + */ +export default function validateHandlers( + req: NextRequest, + allowedOperations: { [k in HTTP_METHODS]?: APIHandler } +) { + const methods = Object.keys(allowedOperations) as HTTP_METHODS[] + const allowedMethods = methods.reduce((arr, method) => { + if (allowedOperations[method]) { + arr.push(method) + } + return arr + }, []) + + return validateMethod(req, allowedMethods) +} diff --git a/packages/commerce/src/api/utils/validate-method.ts b/packages/commerce/src/api/utils/validate-method.ts new file mode 100644 index 000000000..945427131 --- /dev/null +++ b/packages/commerce/src/api/utils/validate-method.ts @@ -0,0 +1,48 @@ +import type { NextRequest } from 'next/server' +import { CommerceAPIResponseError } from './errors' + +export type HTTP_METHODS = 'OPTIONS' | 'GET' | 'POST' | 'PUT' | 'DELETE' + +export default function validateMethod( + req: NextRequest, + allowedMethods: HTTP_METHODS[] +) { + const methods = allowedMethods.includes('OPTIONS') + ? allowedMethods + : [...allowedMethods, 'OPTIONS'] + + if (!req.method || !methods.includes(req.method)) { + throw new CommerceAPIResponseError( + `The HTTP ${req.method} method is not supported at this route.`, + new Response( + JSON.stringify({ + errors: [ + { + code: 'invalid_method', + message: `The HTTP ${req.method} method is not supported at this route.`, + }, + ], + }), + { + status: 405, + headers: { + Allow: methods.join(', '), + }, + } + ) + ) + } + + if (req.method === 'OPTIONS') { + throw new CommerceAPIResponseError( + 'This is a CORS preflight request.', + new Response(null, { + status: 204, + headers: { + Allow: methods.join(', '), + 'Content-Length': '0', + }, + }) + ) + } +} diff --git a/packages/commerce/src/api/utils/with-operation-callback.ts b/packages/commerce/src/api/utils/with-operation-callback.ts new file mode 100644 index 000000000..1167cd5c2 --- /dev/null +++ b/packages/commerce/src/api/utils/with-operation-callback.ts @@ -0,0 +1,42 @@ +import type { AllowedOperations, Operation } from '../operations' + +import { z } from 'zod' +import { getOperationError } from './errors' +import { pageSchema } from '../../schemas/page' +import { siteInfoSchema } from '../../schemas/site' +import { productSchema, productsPathsSchema } from '../../schemas/product' + +export const withOperationCallback = + (name: AllowedOperations, fn: (...args: any[]) => Promise) => + async (...args: any[]) => { + try { + const data = await fn(...args) + parse({ name, data }) + return data + } catch (error) { + throw getOperationError(name, error) + } + } + +const parse = ({ name, data }: Operation) => { + switch (name) { + case 'getProduct': + productSchema.optional().parse(data.product) + break + case 'getAllProducts': + z.array(productSchema).parse(data.products) + break + case 'getAllProductPaths': + productsPathsSchema.parse(data.products) + break + case 'getPage': + pageSchema.nullable().parse(data.page) + break + case 'getAllPages': + z.array(pageSchema).parse(data.pages) + break + case 'getSiteInfo': + siteInfoSchema.parse(data) + break + } +} diff --git a/packages/commerce/src/auth/use-login.tsx b/packages/commerce/src/auth/use-login.tsx index 67fb429dc..ce2473543 100644 --- a/packages/commerce/src/auth/use-login.tsx +++ b/packages/commerce/src/auth/use-login.tsx @@ -5,7 +5,7 @@ import type { LoginHook } from '../types/login' import type { Provider } from '..' export type UseLogin< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/auth/use-logout.tsx b/packages/commerce/src/auth/use-logout.tsx index 6ca16decf..f8eaeb60d 100644 --- a/packages/commerce/src/auth/use-logout.tsx +++ b/packages/commerce/src/auth/use-logout.tsx @@ -5,7 +5,7 @@ import type { LogoutHook } from '../types/logout' import type { Provider } from '..' export type UseLogout< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/auth/use-signup.tsx b/packages/commerce/src/auth/use-signup.tsx index 2f846fad6..d9ac23426 100644 --- a/packages/commerce/src/auth/use-signup.tsx +++ b/packages/commerce/src/auth/use-signup.tsx @@ -5,7 +5,7 @@ import type { SignupHook } from '../types/signup' import type { Provider } from '..' export type UseSignup< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/cart/use-add-item.tsx b/packages/commerce/src/cart/use-add-item.tsx index f4072c763..072e68674 100644 --- a/packages/commerce/src/cart/use-add-item.tsx +++ b/packages/commerce/src/cart/use-add-item.tsx @@ -5,7 +5,7 @@ import type { AddItemHook } from '../types/cart' import type { Provider } from '..' export type UseAddItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/cart/use-cart.tsx b/packages/commerce/src/cart/use-cart.tsx index cfce59e36..e37b9844c 100644 --- a/packages/commerce/src/cart/use-cart.tsx +++ b/packages/commerce/src/cart/use-cart.tsx @@ -4,9 +4,8 @@ import type { SWRHook, HookFetcherFn } from '../utils/types' import type { GetCartHook } from '../types/cart' import { Provider, useCommerce } from '..' -export type UseCart< - H extends SWRHook> = SWRHook -> = ReturnType +export type UseCart = SWRHook> = + ReturnType export const fetcher: HookFetcherFn = async ({ options, diff --git a/packages/commerce/src/cart/use-remove-item.tsx b/packages/commerce/src/cart/use-remove-item.tsx index f2bb43ffb..a401f5e10 100644 --- a/packages/commerce/src/cart/use-remove-item.tsx +++ b/packages/commerce/src/cart/use-remove-item.tsx @@ -5,7 +5,7 @@ import type { RemoveItemHook } from '../types/cart' import type { Provider } from '..' export type UseRemoveItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/cart/use-update-item.tsx b/packages/commerce/src/cart/use-update-item.tsx index 2527732eb..099a0b129 100644 --- a/packages/commerce/src/cart/use-update-item.tsx +++ b/packages/commerce/src/cart/use-update-item.tsx @@ -5,7 +5,7 @@ import type { UpdateItemHook } from '../types/cart' import type { Provider } from '..' export type UseUpdateItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/checkout/use-checkout.ts b/packages/commerce/src/checkout/use-checkout.ts index 0fe74cb28..a593d57db 100644 --- a/packages/commerce/src/checkout/use-checkout.ts +++ b/packages/commerce/src/checkout/use-checkout.ts @@ -7,7 +7,7 @@ import { useHook, useSWRHook } from '../utils/use-hook' import { Provider, useCommerce } from '..' export type UseCheckout< - H extends SWRHook> = SWRHook + H extends SWRHook = SWRHook > = ReturnType export const fetcher: HookFetcherFn = async ({ diff --git a/packages/commerce/src/checkout/use-submit-checkout.tsx b/packages/commerce/src/checkout/use-submit-checkout.tsx index a5d865002..7304d0047 100644 --- a/packages/commerce/src/checkout/use-submit-checkout.tsx +++ b/packages/commerce/src/checkout/use-submit-checkout.tsx @@ -6,9 +6,7 @@ import { useHook, useMutationHook } from '../utils/use-hook' import { mutationFetcher } from '../utils/default-fetcher' export type UseSubmitCheckout< - H extends MutationHook< - SubmitCheckoutHook - > = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/address/use-add-item.tsx b/packages/commerce/src/customer/address/use-add-item.tsx index 94c45142e..664ab06fc 100644 --- a/packages/commerce/src/customer/address/use-add-item.tsx +++ b/packages/commerce/src/customer/address/use-add-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseAddItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/address/use-addresses.tsx b/packages/commerce/src/customer/address/use-addresses.tsx index 7fc12924c..5d6025503 100644 --- a/packages/commerce/src/customer/address/use-addresses.tsx +++ b/packages/commerce/src/customer/address/use-addresses.tsx @@ -7,7 +7,7 @@ import { useHook, useSWRHook } from '../../utils/use-hook' import { Provider, useCommerce } from '../..' export type UseAddresses< - H extends SWRHook> = SWRHook + H extends SWRHook = SWRHook > = ReturnType export const fetcher: HookFetcherFn = async ({ diff --git a/packages/commerce/src/customer/address/use-remove-item.tsx b/packages/commerce/src/customer/address/use-remove-item.tsx index 820a65dad..e284cdd30 100644 --- a/packages/commerce/src/customer/address/use-remove-item.tsx +++ b/packages/commerce/src/customer/address/use-remove-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseRemoveItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/address/use-update-item.tsx b/packages/commerce/src/customer/address/use-update-item.tsx index d05882296..74803f30d 100644 --- a/packages/commerce/src/customer/address/use-update-item.tsx +++ b/packages/commerce/src/customer/address/use-update-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseUpdateItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/card/use-add-item.tsx b/packages/commerce/src/customer/card/use-add-item.tsx index 7b4ffdb17..a3983988a 100644 --- a/packages/commerce/src/customer/card/use-add-item.tsx +++ b/packages/commerce/src/customer/card/use-add-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseAddItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/card/use-cards.tsx b/packages/commerce/src/customer/card/use-cards.tsx index 57099504f..53562c8ec 100644 --- a/packages/commerce/src/customer/card/use-cards.tsx +++ b/packages/commerce/src/customer/card/use-cards.tsx @@ -6,9 +6,8 @@ import Cookies from 'js-cookie' import { useHook, useSWRHook } from '../../utils/use-hook' import { Provider, useCommerce } from '../..' -export type UseCards< - H extends SWRHook> = SWRHook -> = ReturnType +export type UseCards = SWRHook> = + ReturnType export const fetcher: HookFetcherFn = async ({ options, diff --git a/packages/commerce/src/customer/card/use-remove-item.tsx b/packages/commerce/src/customer/card/use-remove-item.tsx index 1d85fa636..5b1539f27 100644 --- a/packages/commerce/src/customer/card/use-remove-item.tsx +++ b/packages/commerce/src/customer/card/use-remove-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseRemoveItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/card/use-update-item.tsx b/packages/commerce/src/customer/card/use-update-item.tsx index cd8837d7f..0542e5dc9 100644 --- a/packages/commerce/src/customer/card/use-update-item.tsx +++ b/packages/commerce/src/customer/card/use-update-item.tsx @@ -6,7 +6,7 @@ import { useHook, useMutationHook } from '../../utils/use-hook' import { mutationFetcher } from '../../utils/default-fetcher' export type UseUpdateItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/customer/use-customer.tsx b/packages/commerce/src/customer/use-customer.tsx index bbeeb3269..9bb703f7e 100644 --- a/packages/commerce/src/customer/use-customer.tsx +++ b/packages/commerce/src/customer/use-customer.tsx @@ -5,7 +5,7 @@ import type { HookFetcherFn, SWRHook } from '../utils/types' import type { Provider } from '..' export type UseCustomer< - H extends SWRHook> = SWRHook + H extends SWRHook = SWRHook > = ReturnType export const fetcher: HookFetcherFn = SWRFetcher diff --git a/packages/commerce/src/product/use-search.tsx b/packages/commerce/src/product/use-search.tsx index 342b49e6e..7998e9994 100644 --- a/packages/commerce/src/product/use-search.tsx +++ b/packages/commerce/src/product/use-search.tsx @@ -5,7 +5,7 @@ import type { SearchProductsHook } from '../types/product' import type { Provider } from '..' export type UseSearch< - H extends SWRHook> = SWRHook + H extends SWRHook = SWRHook > = ReturnType export const fetcher: HookFetcherFn = SWRFetcher diff --git a/packages/commerce/src/schemas/auth.ts b/packages/commerce/src/schemas/auth.ts new file mode 100644 index 000000000..cab5cf897 --- /dev/null +++ b/packages/commerce/src/schemas/auth.ts @@ -0,0 +1,18 @@ +import { z } from 'zod' + +export const loginBodySchema = z.object({ + redirectTo: z.string().optional(), + email: z.string().email(), + password: z.string().min(7), +}) + +export const logoutBodySchema = z.object({ + redirectTo: z.string().optional(), +}) + +export const signupBodySchema = z.object({ + firstName: z.string(), + lastName: z.string(), + email: z.string().email(), + password: z.string().min(7), +}) diff --git a/packages/commerce/src/schemas/cart.ts b/packages/commerce/src/schemas/cart.ts new file mode 100644 index 000000000..69820c22a --- /dev/null +++ b/packages/commerce/src/schemas/cart.ts @@ -0,0 +1,102 @@ +import { z } from 'zod' + +export const getCartBodySchema = z.object({ + cartId: z.string().optional(), +}) + +export const cartItemBodySchema = z.object({ + variantId: z.string(), + productId: z.string().optional(), + quantity: z.number().min(1).optional(), +}) + +export const addItemBodySchema = z.object({ + cartId: z.string().optional(), + item: cartItemBodySchema, +}) + +export const updateItemBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), + item: cartItemBodySchema, +}) + +export const removeItemBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), +}) + +export const discountSchema = z.object({ + value: z.number(), +}) + +export const optionsSchema = z.object({ + id: z.string().optional(), + name: z.string(), + value: z.string(), +}) + +export const cartProductVariantSchema = z.object({ + id: z.string(), + sku: z.string().optional(), + name: z.string(), + price: z.number(), + listPrice: z.number(), + availableForSale: z.boolean().optional(), + requiresShipping: z.boolean().optional(), + image: z.object({ + url: z.string(), + altText: z.string().optional(), + }), + weight: z + .object({ + value: z.number(), + unit: z.string(), + }) + .optional(), + height: z + .object({ + value: z.number(), + unit: z.string(), + }) + .optional(), + width: z + .object({ + value: z.number(), + unit: z.string(), + }) + .optional(), + depth: z + .object({ + value: z.number(), + unit: z.string(), + }) + .optional(), +}) + +export const cartLineItemSchema = z.object({ + id: z.string(), + variantId: z.string(), + productId: z.string(), + name: z.string(), + quantity: z.number().min(1), + discounts: z.array(discountSchema).optional(), + path: z.string().startsWith('/').optional(), + variant: cartProductVariantSchema, + options: z.array(optionsSchema).optional(), +}) + +export const cartSchema = z.object({ + id: z.string(), + customerId: z.string().optional(), + url: z.string().optional(), + email: z.string().optional(), + createdAt: z.string(), + currency: z.object({ code: z.string() }), + taxesIncluded: z.boolean(), + lineItems: z.array(cartLineItemSchema), + lineItemsSubtotalPrice: z.number(), + subtotalPrice: z.number(), + totalPrice: z.number(), + discounts: z.array(discountSchema).optional(), +}) diff --git a/packages/commerce/src/schemas/checkout.ts b/packages/commerce/src/schemas/checkout.ts new file mode 100644 index 000000000..cb5f9b823 --- /dev/null +++ b/packages/commerce/src/schemas/checkout.ts @@ -0,0 +1,25 @@ +import { z } from 'zod' +import { cartLineItemSchema } from './cart' +import { addressFieldsSchema, cardFieldsSchema } from './customer' + +export const getCheckoutBodySchema = z.object({ + cartId: z.string().optional(), +}) + +export const submitCheckoutBodySchema = z.object({ + cartId: z.string(), + item: z.object({ + cartId: z.string().optional(), + card: cardFieldsSchema, + address: addressFieldsSchema, + }), +}) + +export const checkoutSchema = z.object({ + hasPayment: z.boolean(), + hasShipping: z.boolean(), + addressId: z.string(), + payments: z.array(cardFieldsSchema).optional(), + cardId: z.string().optional(), + lineItems: z.array(cartLineItemSchema).optional(), +}) diff --git a/packages/commerce/src/schemas/customer.ts b/packages/commerce/src/schemas/customer.ts new file mode 100644 index 000000000..a48ba06ab --- /dev/null +++ b/packages/commerce/src/schemas/customer.ts @@ -0,0 +1,84 @@ +import { z } from 'zod' + +export const getCustomerAddressBodySchema = z.object({ + cartId: z.string(), +}) + +export const customerSchema = z.object({ + id: z.string(), + firstName: z.string(), + lastName: z.string(), + email: z.string().optional(), + phone: z.string().optional(), + company: z.string().optional(), + notes: z.string().optional(), + acceptsMarketing: z.boolean().optional(), +}) + +export const addressSchema = z.object({ + id: z.string(), + mask: z.string(), +}) + +export const addressFieldsSchema = z.object({ + type: z.string(), + firstName: z.string(), + lastName: z.string(), + company: z.string(), + streetNumber: z.string(), + apartments: z.string(), + zipCode: z.string(), + city: z.string(), + country: z.string(), +}) + +export const addAddressBodySchema = z.object({ + cartId: z.string(), + item: addressFieldsSchema, +}) + +export const updateAddressBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), + item: addressFieldsSchema, +}) + +export const deleteAddressBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), +}) + +export const cardFieldsSchema = z.object({ + cardHolder: z.string(), + cardNumber: z.string(), + cardExpireDate: z.string(), + cardCvc: z.string(), + firstName: z.string(), + lastName: z.string(), + company: z.string(), + streetNumber: z.string(), + zipCode: z.string(), + city: z.string(), + country: z.string(), +}) + +export const cardSchema = z.object({ + id: z.string(), + mask: z.string(), +}) + +export const addCardBodySchema = z.object({ + cartId: z.string(), + item: cardFieldsSchema, +}) + +export const updateCardBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), + item: cardFieldsSchema, +}) + +export const deleteCardBodySchema = z.object({ + cartId: z.string(), + itemId: z.string(), +}) diff --git a/packages/commerce/src/schemas/page.ts b/packages/commerce/src/schemas/page.ts new file mode 100644 index 000000000..5dfd175e1 --- /dev/null +++ b/packages/commerce/src/schemas/page.ts @@ -0,0 +1,18 @@ +import { z } from 'zod' + +export const pageSchema = z.object({ + id: z.string(), + name: z.string(), + url: z.string().startsWith('/').optional(), + body: z.string(), + is_visible: z.boolean().optional(), + sort_order: z.number().optional(), +}) + +export const pagesPathsSchema = z.array( + z.object({ + page: z.object({ + path: z.string().startsWith('/'), + }), + }) +) diff --git a/packages/commerce/src/schemas/product.ts b/packages/commerce/src/schemas/product.ts new file mode 100644 index 000000000..ff10d9b46 --- /dev/null +++ b/packages/commerce/src/schemas/product.ts @@ -0,0 +1,65 @@ +import { boolean, z } from 'zod' + +export const productPriceSchema = z.object({ + value: z.number(), + currencyCode: z.string().max(3).optional(), + retailPrice: z.number().optional(), +}) + +export const productOptionSchema = z.object({ + id: z.string(), + displayName: z.string(), + values: z.array( + z.object({ + label: z.string(), + hexColors: z.array(z.string()).optional(), + }) + ), +}) + +export const productImageSchema = z.object({ + url: z.string().url().or(z.string().startsWith('/')), + alt: z.string().optional(), + width: z.number().optional(), + height: z.number().optional(), +}) + +export const productVariantSchema = z.object({ + id: z.string(), + sku: z.string().nullish(), + name: z.string().optional(), + options: z.array(productOptionSchema), + image: productImageSchema.optional(), +}) + +export const productSchema = z.object({ + id: z.string(), + name: z.string(), + description: z.string(), + descriptionHtml: z.string().optional(), + sku: z.string().nullish(), + slug: z.string(), + path: z.string().startsWith('/'), + images: z.array(productImageSchema), + variants: z.array(productVariantSchema), + price: productPriceSchema, + options: z.array(productOptionSchema), + vendor: z.string().optional(), +}) + +export const productsPathsSchema = z.array( + z.object({ path: z.string().startsWith('/') }) +) + +export const searchProductBodySchema = z.object({ + search: z.string().optional(), + categoryId: z.string().optional(), + brandId: z.string().optional(), + sort: z.string().optional(), + locale: z.string().optional(), +}) + +export const searchProductsSchema = z.object({ + products: z.array(productSchema), + found: z.boolean(), +}) diff --git a/packages/commerce/src/schemas/site.ts b/packages/commerce/src/schemas/site.ts new file mode 100644 index 000000000..f6c101e7f --- /dev/null +++ b/packages/commerce/src/schemas/site.ts @@ -0,0 +1,18 @@ +import { z } from 'zod' + +export const siteInfoSchema = z.object({ + categories: z.array( + z.object({ + id: z.string(), + name: z.string(), + path: z.string().startsWith('/'), + }) + ), + brands: z.array( + z.object({ + id: z.string(), + name: z.string(), + path: z.string().startsWith('/'), + }) + ), +}) diff --git a/packages/commerce/src/schemas/whishlist.ts b/packages/commerce/src/schemas/whishlist.ts new file mode 100644 index 000000000..58c9a2865 --- /dev/null +++ b/packages/commerce/src/schemas/whishlist.ts @@ -0,0 +1,41 @@ +import { z } from 'zod' +import { productSchema } from './product' + +export const wishlistSchemaItem = z.object({ + id: z.string(), + productId: z.string(), + variantId: z.string(), + product: productSchema.optional(), +}) + +export const wishlistSchema = z.object({ + id: z.string(), + items: z.array(wishlistSchemaItem), + token: z.string().optional(), +}) + +export const getWishlistBodySchema = z.object({ + customerToken: z.string().optional(), + includeProducts: z.boolean(), +}) + +export const wishlistItemBodySchema = z.object({ + productId: z.string(), + variantId: z.string(), +}) + +export const addItemBodySchema = z.object({ + customerToken: z.string(), + item: wishlistItemBodySchema, +}) + +export const updateItemBodySchema = z.object({ + customerToken: z.string(), + itemId: z.string(), + item: wishlistItemBodySchema, +}) + +export const removeItemBodySchema = z.object({ + customerToken: z.string(), + itemId: z.string(), +}) diff --git a/packages/commerce/src/types/cart.ts b/packages/commerce/src/types/cart.ts index e4af878de..014fed873 100644 --- a/packages/commerce/src/types/cart.ts +++ b/packages/commerce/src/types/cart.ts @@ -1,177 +1,265 @@ -import type { Discount, Measurement, Image } from './common' +import type { Discount, Image, Measurement } from './common' -export type SelectedOption = { - // The option's id. - id?: string - // The product option’s name. - name: string - /// The product option’s value. - value: string -} - -export type LineItem = { +// TODO: This should use the same type as the `ProductVariant` type from `product.ts` +export interface ProductVariant { + /** + * The unique identifier for the variant. + */ id: string - variantId: string - productId: string + /** + * The SKU (stock keeping unit) associated with the product variant. + */ + sku?: string + /** + * The product variant’s name, or the product's name. + */ name: string - quantity: number - discounts: Discount[] - // A human-friendly unique string automatically generated from the product’s name - path: string - variant: ProductVariant - options?: SelectedOption[] -} - -export type ProductVariant = { - id: string - // The SKU (stock keeping unit) associated with the product variant. - sku: string - // The product variant’s title, or the product's name. - name: string - // Whether a customer needs to provide a shipping address when placing - // an order for the product variant. - requiresShipping: boolean - // The product variant’s price after all discounts are applied. + /** + * The product variant’s price after all discounts are applied. + */ price: number - // Product variant’s price, as quoted by the manufacturer/distributor. + /** + * The product variant’s price before discounts are applied. + */ listPrice: number - // Image associated with the product variant. Falls back to the product image - // if no image is available. - image?: Image - // Indicates whether this product variant is in stock. - isInStock?: boolean - // Indicates if the product variant is available for sale. + /** + * Indicates if the variant is available for sale. + */ availableForSale?: boolean - // The variant's weight. If a weight was not explicitly specified on the - // variant this will be the product's weight. + /** + * Whether a customer needs to provide a shipping address when placing + * an order for the product variant. + */ + requiresShipping?: boolean + /** + * The image associated with the variant. + */ + image?: Image + /** + * The variant's weight. If a weight was not explicitly specified on the + * variant, this will be the product's weight. + */ weight?: Measurement - // The variant's height. If a height was not explicitly specified on the - // variant, this will be the product's height. + /** + * The variant's height. If a height was not explicitly specified on the + * variant, this will be the product's height. + */ height?: Measurement - // The variant's width. If a width was not explicitly specified on the - // variant, this will be the product's width. + /** + * The variant's width. If a width was not explicitly specified on the + * variant, this will be the product's width. + */ width?: Measurement - // The variant's depth. If a depth was not explicitly specified on the - // variant, this will be the product's depth. + /** + * The variant's depth. If a depth was not explicitly specified on the + * variant, this will be the product's depth. + */ depth?: Measurement } -// Shopping cart, a.k.a Checkout -export type Cart = { +export interface SelectedOption { + /** + * The unique identifier for the option. + */ + id?: string + /** + * The product option’s name, such as "Color" or "Size". + */ + name: string + /** + * The product option’s value, such as "Red" or "XL". + */ + value: string +} + +export interface LineItem { + /** + * The unique identifier for the line item. + */ id: string - // ID of the customer to which the cart belongs. + /** + * The unique identifier for the product variant. + */ + variantId: string + /** + * The unique identifier for the product, if the variant is not provided. + */ + productId: string + /** + * This is usually the product's name. + */ + name: string + /** + * The quantity of the product variant in the line item. + */ + quantity: number + /** + * List of discounts applied to the line item. + */ + discounts: Discount[] + /** + * A human-friendly unique string automatically generated from the product’s name. + */ + path: string + /** + * The product variant. + */ + variant: ProductVariant + /** + * List of selected options, to be used when displaying the line item, such as Color: Red, Size: XL. + */ + options?: SelectedOption[] +} + +/** + * Shopping cart, a.k.a Checkout + */ +export interface Cart { + /** + * The unique identifier for the cart. + */ + id: string + /** + * ID of the customer to which the cart belongs. + */ customerId?: string - // The email assigned to this cart + /** + * The URL of the cart. + */ + url?: string + /** + * The email assigned to this cart. + */ email?: string - // The date and time when the cart was created. + /** + * The date and time when the cart was created. + */ createdAt: string - // The currency used for this cart + /** + * The currency used for this cart */ currency: { code: string } - // Specifies if taxes are included in the line items. + /** + * Indicates if taxes are included in the line items. + */ taxesIncluded: boolean + /** + * List of cart line items. + */ lineItems: LineItem[] - // The sum of all the prices of all the items in the cart. - // Duties, taxes, shipping and discounts excluded. + /** + * The sum of all the pricexs of all the items in the cart. + * Duties, taxes, shipping and discounts excluded. + */ lineItemsSubtotalPrice: number - // Price of the cart before duties, shipping and taxes. + /** + * Price of the cart before duties, shipping and taxes.*/ subtotalPrice: number - // The sum of all the prices of all the items in the cart. - // Duties, taxes and discounts included. + /** + * The sum of all the prices of all the items in the cart. + * Duties, taxes and discounts included. + */ totalPrice: number - // Discounts that have been applied on the cart. + /** + * Discounts that have been applied on the cart. + */ discounts?: Discount[] } /** * Base cart item body used for cart mutations */ -export type CartItemBody = { +export interface CartItemBody { + /** + * The unique identifier for the product variant. + */ variantId: string + /** + * The unique identifier for the product, if the variant is not provided. + */ productId?: string + /** + * The quantity of the product variant. + */ quantity?: number + + /** + * The product variant's selected options. + */ + optionsSelected?: SelectedOption[] } /** - * Hooks schema + * Cart Hooks for add, update and remove items from the cart */ - -export type CartTypes = { - cart?: Cart - item: LineItem - itemBody: CartItemBody +export type CartHooks = { + getCart: GetCartHook + addItem: AddItemHook + updateItem: UpdateItemHook + removeItem: RemoveItemHook } -export type CartHooks = { - getCart: GetCartHook - addItem: AddItemHook - updateItem: UpdateItemHook - removeItem: RemoveItemHook -} - -export type GetCartHook = { - data: T['cart'] | null +export type GetCartHook = { + data: Cart | null | undefined input: {} fetcherInput: { cartId?: string } swrState: { isEmpty: boolean } } -export type AddItemHook = { - data: T['cart'] - input?: T['itemBody'] - fetcherInput: T['itemBody'] - body: { item: T['itemBody'] } - actionInput: T['itemBody'] +export type AddItemHook = { + data: Cart | null | undefined + input?: CartItemBody + fetcherInput: CartItemBody + body: { item: CartItemBody } + actionInput: CartItemBody } -export type UpdateItemHook = { - data: T['cart'] | null - input: { item?: T['item']; wait?: number } - fetcherInput: { itemId: string; item: T['itemBody'] } - body: { itemId: string; item: T['itemBody'] } - actionInput: T['itemBody'] & { id: string } +export type UpdateItemHook = { + data: Cart | null | undefined + input: { item?: LineItem; wait?: number } + fetcherInput: { itemId: string; item: CartItemBody } + body: { itemId: string; item: CartItemBody } + actionInput: CartItemBody & { id: string } } -export type RemoveItemHook = { - data: T['cart'] | null - input: { item?: T['item'] } +export type RemoveItemHook = { + data: Cart | null | undefined + input: { item?: LineItem } fetcherInput: { itemId: string } body: { itemId: string } actionInput: { id: string } } /** - * API Schema + * Cart API endpoitns & handlers for add, update and remove items from the cart */ - -export type CartSchema = { +export type CartSchema = { endpoint: { options: {} - handlers: CartHandlers + handlers: CartHandlers } } -export type CartHandlers = { - getCart: GetCartHandler - addItem: AddItemHandler - updateItem: UpdateItemHandler - removeItem: RemoveItemHandler +export type CartHandlers = { + getCart: GetCartHandler + addItem: AddItemHandler + updateItem: UpdateItemHandler + removeItem: RemoveItemHandler } -export type GetCartHandler = GetCartHook & { +export type GetCartHandler = GetCartHook & { body: { cartId?: string } } -export type AddItemHandler = AddItemHook & { +export type AddItemHandler = AddItemHook & { + data: Cart | null | undefined + body: { cartId?: string } +} + +export type UpdateItemHandler = UpdateItemHook & { + data: Cart body: { cartId: string } } -export type UpdateItemHandler = - UpdateItemHook & { - data: T['cart'] - body: { cartId: string } - } - -export type RemoveItemHandler = - RemoveItemHook & { - body: { cartId: string } - } +export type RemoveItemHandler = RemoveItemHook & { + body: { cartId: string } +} diff --git a/packages/commerce/src/types/checkout.ts b/packages/commerce/src/types/checkout.ts index 417604fdb..326af252e 100644 --- a/packages/commerce/src/types/checkout.ts +++ b/packages/commerce/src/types/checkout.ts @@ -1,57 +1,89 @@ import type { UseSubmitCheckout } from '../checkout/use-submit-checkout' -import type { Address, AddressFields } from './customer/address' +import type { AddressFields } from './customer/address' import type { Card, CardFields } from './customer/card' +import type { LineItem } from './cart' -// Index -export type Checkout = any - -export type CheckoutTypes = { - card?: Card | CardFields - address?: Address | AddressFields - checkout?: Checkout - hasPayment?: boolean - hasShipping?: boolean +export interface Checkout { + /** + * Indicates if the checkout has payment iformation collected. + */ + hasPayment: boolean + /** + * Indicates if the checkout has shipping information collected. + */ + hasShipping: boolean + /** + * The unique identifier for the address that the customer has selected for shipping. + */ + addressId: string + /** + * The list of payment cards that the customer has available. + */ + payments?: Card[] + /** + * The unique identifier of the card that the customer has selected for payment. + */ + cardId?: string + /** + * List of items in the checkout. + */ + lineItems?: LineItem[] } -export type SubmitCheckoutHook = { - data: T - input?: T - fetcherInput: T - body: { item: T } - actionInput: T +export interface CheckoutBody { + /** + * The unique identifier for the cart. + */ + cartId?: string + /** + * The Card information. + * @see CardFields + */ + card: CardFields + /** + * The Address information. + * @see AddressFields + */ + address: AddressFields } -export type GetCheckoutHook = { - data: T['checkout'] | null +export type SubmitCheckoutHook = { + data: Checkout | null + input?: CheckoutBody + fetcherInput: CheckoutBody + body: { item: CheckoutBody } + actionInput: CheckoutBody +} + +export type GetCheckoutHook = { + data: Checkout | null input: {} fetcherInput: { cartId?: string } swrState: { isEmpty: boolean } mutations: { submit: UseSubmitCheckout } } -export type CheckoutHooks = { - submitCheckout?: SubmitCheckoutHook - getCheckout: GetCheckoutHook +export type CheckoutHooks = { + submitCheckout?: SubmitCheckoutHook + getCheckout: GetCheckoutHook } -export type GetCheckoutHandler = - GetCheckoutHook & { - body: { cartId: string } - } - -export type SubmitCheckoutHandler = - SubmitCheckoutHook & { - body: { cartId: string } - } - -export type CheckoutHandlers = { - getCheckout: GetCheckoutHandler - submitCheckout?: SubmitCheckoutHandler +export type GetCheckoutHandler = GetCheckoutHook & { + body: { cartId?: string } } -export type CheckoutSchema = { +export type SubmitCheckoutHandler = SubmitCheckoutHook & { + body: { cartId: string } +} + +export type CheckoutHandlers = { + getCheckout: GetCheckoutHandler + submitCheckout?: SubmitCheckoutHandler +} + +export type CheckoutSchema = { endpoint: { options: {} - handlers: CheckoutHandlers + handlers: CheckoutHandlers } } diff --git a/packages/commerce/src/types/common.ts b/packages/commerce/src/types/common.ts index 06908c464..d63dfc0b9 100644 --- a/packages/commerce/src/types/common.ts +++ b/packages/commerce/src/types/common.ts @@ -1,16 +1,36 @@ -export type Discount = { - // The value of the discount, can be an amount or percentage +export interface Discount { + /** + * The value of the discount, can be an amount or percentage. + */ value: number } -export type Measurement = { +export interface Measurement { + /** + * The measurement's value. + */ value: number + /** + * The measurement's unit, such as "KILOGRAMS", "GRAMS", "POUNDS" & "OOUNCES". + */ unit: 'KILOGRAMS' | 'GRAMS' | 'POUNDS' | 'OUNCES' } -export type Image = { +export interface Image { + /** + * The URL of the image. + */ url: string - altText?: string + /** + * A word or phrase that describes the content of an image. + */ + alt?: string + /** + * The image's width. + */ width?: number + /** + * The image's height. + */ height?: number } diff --git a/packages/commerce/src/types/customer/address.ts b/packages/commerce/src/types/customer/address.ts index 8dc6ffc0d..e6b71ff52 100644 --- a/packages/commerce/src/types/customer/address.ts +++ b/packages/commerce/src/types/customer/address.ts @@ -1,111 +1,122 @@ export interface Address { + /** + * The unique identifier for the address. + */ id: string + /** + * The customer's first name. + */ mask: string } export interface AddressFields { + /** + * The type of address. + * @example "billing, shipping" + */ type: string + /** + * The customer's first name. + */ firstName: string + /** + * The customer's last name. + */ lastName: string + /** + * Company name. + */ company: string + /** + * The customer's billing address street number. + */ streetNumber: string + /** + * The customer's billing address apartment number. + */ apartments: string + /** + * The customer's billing address zip code. + */ zipCode: string + /** + * The customer's billing address city. + */ city: string + /** + * The customer's billing address country. + */ country: string } -export type CustomerAddressTypes = { - address?: Address - fields: AddressFields -} +/** + * Hooks for managing a customer's addresses. + */ -export type GetAddressesHook< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { - data: T['address'][] | null +export type GetAddressesHook = { + data: Address[] | null input: {} fetcherInput: { cartId?: string } swrState: { isEmpty: boolean } } -export type AddItemHook = - { - data: T['address'] - input?: T['fields'] - fetcherInput: T['fields'] - body: { item: T['fields'] } - actionInput: T['fields'] - } - -export type UpdateItemHook< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { - data: T['address'] | null - input: { item?: T['fields']; wait?: number } - fetcherInput: { itemId: string; item: T['fields'] } - body: { itemId: string; item: T['fields'] } - actionInput: T['fields'] & { id: string } +export type AddItemHook = { + data: Address | null + input?: AddressFields + fetcherInput: AddressFields + body: { item: AddressFields } + actionInput: AddressFields } -export type RemoveItemHook< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { - data: T['address'] | null - input: { item?: T['address'] } +export type UpdateItemHook = { + data: Address | null + input: { item?: AddressFields; wait?: number } + fetcherInput: { itemId: string; item: AddressFields } + body: { itemId: string; item: AddressFields } + actionInput: AddressFields & { id: string } +} + +export type RemoveItemHook = { + data: Address | null + input: { item?: Address } fetcherInput: { itemId: string } body: { itemId: string } actionInput: { id: string } } -export type CustomerAddressHooks< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { - getAddresses: GetAddressesHook - addItem: AddItemHook - updateItem: UpdateItemHook - removeItem: RemoveItemHook +export type CustomerAddressHooks = { + getAddresses: GetAddressesHook + addItem: AddItemHook + updateItem: UpdateItemHook + removeItem: RemoveItemHook } -export type AddressHandler< - T extends CustomerAddressTypes = CustomerAddressTypes -> = GetAddressesHook & { - body: { cartId?: string } -} +/** + * API endpoints for managing a customer's addresses. + */ -export type AddItemHandler< - T extends CustomerAddressTypes = CustomerAddressTypes -> = AddItemHook & { +export type AddItemHandler = AddItemHook & { body: { cartId: string } } -export type UpdateItemHandler< - T extends CustomerAddressTypes = CustomerAddressTypes -> = UpdateItemHook & { - data: T['address'] +export type UpdateItemHandler = UpdateItemHook & { body: { cartId: string } } -export type RemoveItemHandler< - T extends CustomerAddressTypes = CustomerAddressTypes -> = RemoveItemHook & { +export type RemoveItemHandler = RemoveItemHook & { body: { cartId: string } } -export type CustomerAddressHandlers< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { - getAddresses: GetAddressesHook - addItem: AddItemHandler - updateItem: UpdateItemHandler - removeItem: RemoveItemHandler +export type CustomerAddressHandlers = { + getAddresses: GetAddressesHook + addItem: AddItemHandler + updateItem: UpdateItemHandler + removeItem: RemoveItemHandler } -export type CustomerAddressSchema< - T extends CustomerAddressTypes = CustomerAddressTypes -> = { +export type CustomerAddressSchema = { endpoint: { options: {} - handlers: CustomerAddressHandlers + handlers: CustomerAddressHandlers } } diff --git a/packages/commerce/src/types/customer/card.ts b/packages/commerce/src/types/customer/card.ts index e9b220dcc..37a134de8 100644 --- a/packages/commerce/src/types/customer/card.ts +++ b/packages/commerce/src/types/customer/card.ts @@ -1,102 +1,138 @@ export interface Card { + /** + * Unique identifier for the card. + */ id: string + /** + * Masked card number. Contains only the last 4 digits. + * @example "4242" + */ mask: string + /** + * The card's brand. + * @example "Visa, Mastercard, etc." + */ provider: string } +/** + * The fields required to create a new card. + */ export interface CardFields { + /** + * Name on the card. + */ cardHolder: string + /** + * The card's number, consisting of 16 digits. + */ cardNumber: string + /** + * The card's expiry month and year, in the format MM/YY. + * @example "01/25" + */ cardExpireDate: string + /** + * The card's security code, consisting of 3 digits. + */ cardCvc: string + /** + * The customer's first name. + */ firstName: string + /** + * The customer's last name. + */ lastName: string + /** + * Company name. + */ company: string + /** + * The customer's billing address street number. + */ streetNumber: string + /** + * The customer's billing address zip code. + */ zipCode: string + /** + * The customer's billing address city. + */ city: string + /** + * The customer's billing address country. + */ country: string } -export type CustomerCardTypes = { - card?: Card - fields: CardFields -} +/** + * Hooks for managing a customer's cards. + */ -export type GetCardsHook = { - data: T['card'][] | null +export type GetCardsHook = { + data: Card[] | null input: {} fetcherInput: { cartId?: string } swrState: { isEmpty: boolean } } -export type AddItemHook = { - data: T['card'] - input?: T['fields'] - fetcherInput: T['fields'] - body: { item: T['fields'] } - actionInput: T['fields'] +export type AddItemHook = { + data: Card | null + input?: CardFields + fetcherInput: CardFields + body: { item: CardFields } + actionInput: CardFields } -export type UpdateItemHook = { - data: T['card'] | null - input: { item?: T['fields']; wait?: number } - fetcherInput: { itemId: string; item: T['fields'] } - body: { itemId: string; item: T['fields'] } - actionInput: T['fields'] & { id: string } +export type UpdateItemHook = { + data: Card | null + input: { item?: CardFields; wait?: number } + fetcherInput: { itemId: string; item: CardFields } + body: { itemId: string; item: CardFields } + actionInput: CardFields & { id: string } } -export type RemoveItemHook = { - data: T['card'] | null - input: { item?: T['card'] } +export type RemoveItemHook = { + data: Card | null + input: { item?: Card } fetcherInput: { itemId: string } body: { itemId: string } actionInput: { id: string } } -export type CustomerCardHooks = - { - getCards: GetCardsHook - addItem: AddItemHook - updateItem: UpdateItemHook - removeItem: RemoveItemHook - } - -export type CardsHandler = - GetCardsHook & { - body: { cartId?: string } - } - -export type AddItemHandler = - AddItemHook & { - body: { cartId: string } - } - -export type UpdateItemHandler = - UpdateItemHook & { - data: T['card'] - body: { cartId: string } - } - -export type RemoveItemHandler = - RemoveItemHook & { - body: { cartId: string } - } - -export type CustomerCardHandlers< - T extends CustomerCardTypes = CustomerCardTypes -> = { - getCards: GetCardsHook - addItem: AddItemHandler - updateItem: UpdateItemHandler - removeItem: RemoveItemHandler +export interface CustomerCardHooks { + getCards: GetCardsHook + addItem: AddItemHook + updateItem: UpdateItemHook + removeItem: RemoveItemHook } -export type CustomerCardSchema< - T extends CustomerCardTypes = CustomerCardTypes -> = { +/** + * Customer card API handlers. + */ +export type AddItemHandler = AddItemHook & { + body: { cartId: string } +} + +export type UpdateItemHandler = UpdateItemHook & { + body: { cartId: string } +} + +export type RemoveItemHandler = RemoveItemHook & { + body: { cartId: string } +} + +export type CustomerCardHandlers = { + getCards: GetCardsHook + addItem: AddItemHandler + updateItem: UpdateItemHandler + removeItem: RemoveItemHandler +} + +export type CustomerCardSchema = { endpoint: { options: {} - handlers: CustomerCardHandlers + handlers: CustomerCardHandlers } } diff --git a/packages/commerce/src/types/customer/index.ts b/packages/commerce/src/types/customer/index.ts index f0b210f62..89a963a29 100644 --- a/packages/commerce/src/types/customer/index.ts +++ b/packages/commerce/src/types/customer/index.ts @@ -1,24 +1,53 @@ export * as Card from './card' export * as Address from './address' -// TODO: define this type -export type Customer = any - -export type CustomerTypes = { - customer: Customer +export interface Customer { + /** + * The unique identifier for the customer. + */ + id: string + /** + * The customer's first name. + */ + firstName: string + /** + * The customer's last name. + */ + lastName: string + /** + * The customer's email address. + */ + email?: string + /** + * The customer's phone number. + * @optional + */ + phone?: string + /** + * The customer's company name. + */ + company?: string + /** + * The customer's notes. + */ + notes?: string + /** + * Indicates wathever the customer accepts marketing, such as email newsletters. + */ + acceptsMarketing?: boolean } -export type CustomerHook = { - data: T['customer'] | null - fetchData: { customer: T['customer'] } | null +export type CustomerHook = { + data: Customer | null | undefined + fetchData: { customer: Customer } | null } -export type CustomerSchema = { +export type CustomerSchema = { endpoint: { options: {} handlers: { getLoggedInCustomer: { - data: { customer: T['customer'] } | null + data: { customer: Customer } | null } } } diff --git a/packages/commerce/src/types/login.ts b/packages/commerce/src/types/login.ts index b6ef228e0..1fb06101a 100644 --- a/packages/commerce/src/types/login.ts +++ b/packages/commerce/src/types/login.ts @@ -1,29 +1,31 @@ -export type LoginBody = { +export interface LoginBody { + /** + * The user's email address. + */ email: string + /** + * The user's password. + */ password: string } -export type LoginTypes = { - body: LoginBody -} - -export type LoginHook = { +export type LoginHook = { data: null actionInput: LoginBody fetcherInput: LoginBody - body: T['body'] + body: LoginBody } -export type LoginSchema = { +export type LoginSchema = { endpoint: { options: {} handlers: { - login: LoginHook + login: LoginHook } } } export type LoginOperation = { - data: { result?: string } + data: { result?: string; status?: number; headers?: Headers } variables: unknown } diff --git a/packages/commerce/src/types/logout.ts b/packages/commerce/src/types/logout.ts index a7240052f..df981b06e 100644 --- a/packages/commerce/src/types/logout.ts +++ b/packages/commerce/src/types/logout.ts @@ -1,17 +1,15 @@ -export type LogoutTypes = { - body: { redirectTo?: string } -} - -export type LogoutHook = { +export type LogoutHook = { data: null - body: T['body'] + body: { + redirectTo?: string + } } -export type LogoutSchema = { +export type LogoutSchema = { endpoint: { options: {} handlers: { - logout: LogoutHook + logout: LogoutHook } } } diff --git a/packages/commerce/src/types/page.ts b/packages/commerce/src/types/page.ts index 89f82c1a6..24c6ae8c1 100644 --- a/packages/commerce/src/types/page.ts +++ b/packages/commerce/src/types/page.ts @@ -1,28 +1,43 @@ -// TODO: define this type export type Page = { - // ID of the Web page. + /** + * The unique identifier for the page. + */ id: string - // Page name, as displayed on the storefront. + /** + * Page name, as displayed on the storefront. + */ name: string - // Relative URL on the storefront for this page. + /** + * Relative URL on the storefront for this page. + */ url?: string - // HTML or variable that populates this page’s `` element, in default/desktop view. Required in POST if page type is `raw`. + /** + * HTML or variable that populates this page’s `` element, in default/desktop view. Required in POST if page type is `raw`. + */ body: string - // If true, this page appears in the storefront’s navigation menu. + /** + * If true, this page appears in the storefront’s navigation menu. + */ is_visible?: boolean - // Order in which this page should display on the storefront. (Lower integers specify earlier display.) + /** + * Order in which this page should display on the storefront. (Lower integers specify earlier display.) + */ sort_order?: number } -export type PageTypes = { - page: Page +/** + * Operation to get all pages. + */ +export type GetAllPagesOperation = { + data: { pages: Page[] } } -export type GetAllPagesOperation = { - data: { pages: T['page'][] } -} - -export type GetPageOperation = { - data: { page?: T['page'] } - variables: { id: string } +export type GetPageOperation = { + data: { page?: Page } + variables: { + /** + * The unique identifier of the page. + */ + id: string + } } diff --git a/packages/commerce/src/types/product.ts b/packages/commerce/src/types/product.ts index fb48ba00b..2f6c34acb 100644 --- a/packages/commerce/src/types/product.ts +++ b/packages/commerce/src/types/product.ts @@ -1,91 +1,207 @@ -export type ProductImage = { - url: string - alt?: string -} +import { Image } from './common' -export type ProductPrice = { +export interface ProductPrice { + /** + * The price after all discounts are applied. + */ value: number + /** + * The currency code for the price. This is a 3-letter ISO 4217 code. + * @example USD + */ currencyCode?: 'USD' | 'EUR' | 'ARS' | 'GBP' | string + /** + * The retail price of the product. This can be used to mark a product as on sale, when `retailPrice` is higher than the price a.k.a `value`. + */ retailPrice?: number - salePrice?: number - listPrice?: number - extendedSalePrice?: number - extendedListPrice?: number } -export type ProductOption = { +export interface ProductOption { __typename?: 'MultipleChoiceOption' + /** + * The unique identifier for the option. + */ id: string + /** + * The product option’s name. + * @example `Color` or `Size` + */ displayName: string + /** + * List of option values. + * @example `["Red", "Green", "Blue"]` + */ values: ProductOptionValues[] } -export type ProductOptionValues = { +export interface ProductOptionValues { + /** + * A string that uniquely identifies the option value. + */ label: string + /** + * List of hex colors used to display the actual colors in the swatches instead of the name. + */ hexColors?: string[] } -export type ProductVariant = { - id: string | number +export interface ProductVariant { + /** + * The unique identifier for the variant. + */ + id: string + /** + * The SKU (stock keeping unit) associated with the product variant. + */ + sku?: string + /** + * The product variant’s name, or the product's name. + */ + name?: string + /** + * List of product options. + */ options: ProductOption[] + /** + * The product variant’s price after all discounts are applied. + */ + price?: ProductPrice + /** + * The retail price of the product. This can be used to mark a product as on sale, when `retailPrice` is higher than the `price`. + */ + retailPrice?: ProductPrice + /** + * Indicates if the variant is available for sale. + */ availableForSale?: boolean + /** + * Whether a customer needs to provide a shipping address when placing an order for the product variant. + */ + requiresShipping?: boolean + /** + * The image associated with the variant. + */ + image?: Image } -export type Product = { +export interface Product { + /** + * The unique identifier for the product. + */ id: string + /** + * The name of the product. + */ name: string + /** + * Stripped description of the product, single line. + */ description: string + /** + * The description of the product, complete with HTML formatting. + */ descriptionHtml?: string + /** + * The SKU (stock keeping unit) associated with the product. + */ sku?: string + /** + * A human-friendly unique string for the product, automatically generated from its title. + */ slug?: string + /** + * Relative URL on the storefront for the product. + */ path?: string - images: ProductImage[] + /** + * List of images associated with the product. + */ + images: Image[] + /** + * List of the product’s variants. + */ variants: ProductVariant[] + /** + * The product's base price. Could be the minimum value, or default variant price. + */ price: ProductPrice + /** + * List of product's options. + */ options: ProductOption[] + /** + * The product’s vendor name. + */ vendor?: string } -export type SearchProductsBody = { +export interface SearchProductsBody { + /** + * The search query string to filter the products by. + */ search?: string - categoryId?: string | number - brandId?: string | number + /** + * The category ID to filter the products by. + */ + categoryId?: string + /** + * The brand ID to filter the products by. + */ + brandId?: string + /** + * The sort key to sort the products by. + * @example 'trending-desc' | 'latest-desc' | 'price-asc' | 'price-desc' + */ sort?: string + /** + * The locale code, used to localize the product data (if the provider supports it). + */ locale?: string } -export type ProductTypes = { - product: Product - searchBody: SearchProductsBody -} - -export type SearchProductsHook = { +/** + * Fetches a list of products based on the given search criteria. + */ +export type SearchProductsHook = { data: { - products: T['product'][] + /** + * List of products matching the query. + */ + products: Product[] + /** + * Indicates if there are any products matching the query. + */ found: boolean } - body: T['searchBody'] - input: T['searchBody'] - fetcherInput: T['searchBody'] + body: SearchProductsBody + input: SearchProductsBody + fetcherInput: SearchProductsBody } -export type ProductsSchema = { +/** + * Product API schema + */ + +export type ProductsSchema = { endpoint: { options: {} handlers: { - getProducts: SearchProductsHook + getProducts: SearchProductsHook } } } -export type GetAllProductPathsOperation = - { - data: { products: Pick[] } - variables: { first?: number } - } +/** + * Product operations + */ -export type GetAllProductsOperation = { - data: { products: T['product'][] } +export type GetAllProductPathsOperation = { + data: { products: Pick[] } + variables: { first?: number } +} + +export type GetAllProductsOperation = { + data: { products: Product[] } variables: { relevance?: 'featured' | 'best_selling' | 'newest' ids?: string[] @@ -93,7 +209,7 @@ export type GetAllProductsOperation = { } } -export type GetProductOperation = { - data: { product?: T['product'] } +export type GetProductOperation = { + data: { product?: Product } variables: { path: string; slug?: never } | { path?: never; slug: string } } diff --git a/packages/commerce/src/types/signup.ts b/packages/commerce/src/types/signup.ts index 4e23da6c0..17754cf15 100644 --- a/packages/commerce/src/types/signup.ts +++ b/packages/commerce/src/types/signup.ts @@ -1,26 +1,34 @@ -export type SignupBody = { +export interface SignupBody { + /** + * The user's first name. + */ firstName: string + /** + * The user's last name. + */ lastName: string + /** + * The user's email address. + */ email: string + /** + * The user's password. + */ password: string } -export type SignupTypes = { - body: SignupBody -} - -export type SignupHook = { +export type SignupHook = { data: null - body: T['body'] - actionInput: T['body'] - fetcherInput: T['body'] + body: SignupBody + actionInput: SignupBody + fetcherInput: SignupBody } -export type SignupSchema = { +export type SignupSchema = { endpoint: { options: {} handlers: { - signup: SignupHook + signup: SignupHook } } } diff --git a/packages/commerce/src/types/site.ts b/packages/commerce/src/types/site.ts index 971539232..3552db08f 100644 --- a/packages/commerce/src/types/site.ts +++ b/packages/commerce/src/types/site.ts @@ -1,24 +1,51 @@ -export type Category = { +export interface Category { + /** + * Unique identifier for the category. + */ id: string + /** + * Name of the category. + */ name: string + /** + * A human-friendly unique string for the category, automatically generated from its name. + * @example "t-shirts" + */ slug: string + /** + * Relative URL on the storefront for the category. + * @example /t-shirts + */ path: string } -export type Brand = any - -export type Navigation = any - -export type SiteTypes = { - category: Category - brand: Brand - navigation?: Navigation +export interface Brand { + /** + * Unique identifier for the brand. + */ + id: string + /** + * Name of the brand. + */ + name: string + /** + * A human-friendly unique string for the category, automatically generated from its name. + * @example "acme" + */ + slug: string + /** + * Relative URL on the storefront for this brand. + * @example "/acme" + */ + path: string } -export type GetSiteInfoOperation = { +/** + * Operation to get site information. This includes categories and brands. + */ +export type GetSiteInfoOperation = { data: { - categories: T['category'][] - brands: T['brand'][] - navigation?: T['navigation'][] + categories: Category[] + brands: Brand[] } } diff --git a/packages/commerce/src/types/wishlist.ts b/packages/commerce/src/types/wishlist.ts index b3759849c..5c5e0d1ea 100644 --- a/packages/commerce/src/types/wishlist.ts +++ b/packages/commerce/src/types/wishlist.ts @@ -1,60 +1,97 @@ -// TODO: define this type -export type Wishlist = any +import { Product } from './product' -export type WishlistItemBody = { - variantId: string | number +export interface WishlistItem { + /** + * The unique identifier for the item. + */ + id: string + /** + * The unique identifier for the product associated with the wishlist item. + */ productId: string + /** + * The unique identifier for the product variant associated with the wishlist item. + */ + variantId: string + /** + * The product associated with the wishlist item. + */ + product: Product } -export type WishlistTypes = { - wishlist: Wishlist - itemBody: WishlistItemBody +export interface Wishlist { + /** + * The unique identifier for the wishlist. + */ + id: string + /** + * List of items in the wishlist. + */ + items: WishlistItem[] + + /** + * Some providers require a token to add an item to a wishlist + */ + token?: string } -export type GetWishlistHook = { - data: T['wishlist'] | null +export interface WishlistItemBody { + /** + * The unique identifier for the product variant to associate with the wishlist. + */ + variantId: string + /** + * The unique identifier for the product to associate with the wishlist. + */ + productId: string + /** + * Some providers require to provide a token to make a request + */ + wishlistToken?: string +} + +export type GetWishlistHook = { + data: Wishlist | null | undefined body: { includeProducts?: boolean } input: { includeProducts?: boolean } fetcherInput: { customerId: string; includeProducts?: boolean } swrState: { isEmpty: boolean } } -export type AddItemHook = { - data: T['wishlist'] - body: { item: T['itemBody'] } - fetcherInput: { item: T['itemBody'] } - actionInput: T['itemBody'] +export type AddItemHook = { + data: Wishlist | null | undefined + body: { item: WishlistItemBody } + fetcherInput: { item: WishlistItemBody } + actionInput: WishlistItemBody } -export type RemoveItemHook = { - data: T['wishlist'] | null - body: { itemId: string } - fetcherInput: { itemId: string } +export type RemoveItemHook = { + data: Wishlist | null | undefined + body: { itemId: string; wishlistToken?: string } + fetcherInput: { itemId: string; wishlistToken?: string } actionInput: { id: string } input: { wishlist?: { includeProducts?: boolean } } } -export type WishlistSchema = { +export type WishlistSchema = { endpoint: { options: {} handlers: { - getWishlist: GetWishlistHook & { - data: T['wishlist'] | null + getWishlist: GetWishlistHook & { + data: Wishlist | null body: { customerToken?: string } } - addItem: AddItemHook & { + addItem: AddItemHook & { body: { customerToken?: string } } - removeItem: RemoveItemHook & { + removeItem: RemoveItemHook & { body: { customerToken?: string } } } } } -export type GetCustomerWishlistOperation< - T extends WishlistTypes = WishlistTypes -> = { - data: { wishlist?: T['wishlist'] } +export type GetCustomerWishlistOperation = { + data: { wishlist?: Wishlist } variables: { customerId: string } } diff --git a/packages/commerce/src/utils/types.ts b/packages/commerce/src/utils/types.ts index 317fea165..578e04094 100644 --- a/packages/commerce/src/utils/types.ts +++ b/packages/commerce/src/utils/types.ts @@ -55,7 +55,7 @@ export type HookFetcherOptions = { method?: string } & ( | { query?: string; url: string } ) -export type HookInputValue = string | number | boolean | undefined +export type HookInputValue = string | number | boolean | null | undefined export type HookSWRInput = [string, HookInputValue][] diff --git a/packages/commerce/src/wishlist/use-add-item.tsx b/packages/commerce/src/wishlist/use-add-item.tsx index f464be1ca..3debffe42 100644 --- a/packages/commerce/src/wishlist/use-add-item.tsx +++ b/packages/commerce/src/wishlist/use-add-item.tsx @@ -5,7 +5,7 @@ import type { AddItemHook } from '../types/wishlist' import type { Provider } from '..' export type UseAddItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher = mutationFetcher diff --git a/packages/commerce/src/wishlist/use-remove-item.tsx b/packages/commerce/src/wishlist/use-remove-item.tsx index 4419c17af..2592011f7 100644 --- a/packages/commerce/src/wishlist/use-remove-item.tsx +++ b/packages/commerce/src/wishlist/use-remove-item.tsx @@ -5,7 +5,7 @@ import type { RemoveItemHook } from '../types/wishlist' import type { Provider } from '..' export type UseRemoveItem< - H extends MutationHook> = MutationHook + H extends MutationHook = MutationHook > = ReturnType export const fetcher: HookFetcherFn = mutationFetcher diff --git a/packages/commerce/src/wishlist/use-wishlist.tsx b/packages/commerce/src/wishlist/use-wishlist.tsx index 672203f79..3d3eede0f 100644 --- a/packages/commerce/src/wishlist/use-wishlist.tsx +++ b/packages/commerce/src/wishlist/use-wishlist.tsx @@ -5,7 +5,7 @@ import type { GetWishlistHook } from '../types/wishlist' import type { Provider } from '..' export type UseWishlist< - H extends SWRHook> = SWRHook + H extends SWRHook = SWRHook > = ReturnType export const fetcher: HookFetcherFn = SWRFetcher diff --git a/packages/commercejs/package.json b/packages/commercejs/package.json index 9887a709f..bb8c3bffd 100644 --- a/packages/commercejs/package.json +++ b/packages/commercejs/package.json @@ -48,30 +48,36 @@ }, "dependencies": { "@chec/commerce.js": "^2.8.0", - "@vercel/commerce": "^0.0.1", + "@vercel/commerce": "workspace:*", + "cookie": "^0.4.1", + "js-cookie": "^3.0.1", + "jsonwebtoken": "^8.5.1", "lodash.debounce": "^4.0.8" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", "@types/chec__commerce.js": "^2.8.4", + "@types/cookie": "^0.4.1", + "@types/js-cookie": "^3.0.2", + "@types/jsonwebtoken": "^8.5.7", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/react": "^18.0.14", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/commercejs/src/api/endpoints/cart/index.ts b/packages/commercejs/src/api/endpoints/cart/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/catalog/index.ts b/packages/commercejs/src/api/endpoints/catalog/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/catalog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/catalog/products/index.ts b/packages/commercejs/src/api/endpoints/catalog/products/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/catalog/products/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/checkout/get-checkout.ts b/packages/commercejs/src/api/endpoints/checkout/get-checkout.ts index 491bf0ac9..f6923f0e3 100644 --- a/packages/commercejs/src/api/endpoints/checkout/get-checkout.ts +++ b/packages/commercejs/src/api/endpoints/checkout/get-checkout.ts @@ -1 +1,3 @@ -export default function noopApi(...args: any[]): void {} +export default function getCheckout(..._args: any[]) { + return Promise.resolve({ data: null }) +} diff --git a/packages/commercejs/src/api/endpoints/checkout/index.ts b/packages/commercejs/src/api/endpoints/checkout/index.ts index 1072902e6..1536c130a 100644 --- a/packages/commercejs/src/api/endpoints/checkout/index.ts +++ b/packages/commercejs/src/api/endpoints/checkout/index.ts @@ -1,18 +1,17 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import checkoutEndpoint from '@vercel/commerce/api/endpoints/checkout' -import type { CheckoutSchema } from '../../../types/checkout' +import type { CheckoutSchema } from '@vercel/commerce/types/checkout' import type { CommercejsAPI } from '../..' -import submitCheckout from './submit-checkout' import getCheckout from './get-checkout' +import submitCheckout from './submit-checkout' export type CheckoutAPI = GetAPISchema - export type CheckoutEndpoint = CheckoutAPI['endpoint'] export const handlers: CheckoutEndpoint['handlers'] = { - submitCheckout, getCheckout, + submitCheckout, } const checkoutApi = createEndpoint({ diff --git a/packages/commercejs/src/api/endpoints/checkout/submit-checkout.ts b/packages/commercejs/src/api/endpoints/checkout/submit-checkout.ts index e0f3012cc..1af220cd0 100644 --- a/packages/commercejs/src/api/endpoints/checkout/submit-checkout.ts +++ b/packages/commercejs/src/api/endpoints/checkout/submit-checkout.ts @@ -5,7 +5,6 @@ import sdkFetcherFunction from '../../utils/sdk-fetch' import { normalizeTestCheckout } from '../../../utils/normalize-checkout' const submitCheckout: CheckoutEndpoint['handlers']['submitCheckout'] = async ({ - res, body: { item, cartId }, config: { sdkFetch }, }) => { @@ -38,7 +37,7 @@ const submitCheckout: CheckoutEndpoint['handlers']['submitCheckout'] = async ({ // Capture the order await sdkFetcher('checkout', 'capture', checkoutToken, checkoutData) - res.status(200).json({ data: null, errors: [] }) + return { data: null } } export default submitCheckout diff --git a/packages/commercejs/src/api/endpoints/customer/address/index.ts b/packages/commercejs/src/api/endpoints/customer/address/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/customer/address/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/customer/card/index.ts b/packages/commercejs/src/api/endpoints/customer/card/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/customer/card/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/customer/index.ts b/packages/commercejs/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/index.ts b/packages/commercejs/src/api/endpoints/index.ts new file mode 100644 index 000000000..2e754505e --- /dev/null +++ b/packages/commercejs/src/api/endpoints/index.ts @@ -0,0 +1,15 @@ +import type { CommercejsAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' + +import login from './login' +import checkout from './checkout' + +const endpoints = { + login, + checkout, +} + +export default function commercejsAPI(commerce: CommercejsAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/commercejs/src/api/endpoints/login/index.ts b/packages/commercejs/src/api/endpoints/login/index.ts index a6dbb4432..a47d8e63f 100644 --- a/packages/commercejs/src/api/endpoints/login/index.ts +++ b/packages/commercejs/src/api/endpoints/login/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import loginEndpoint from '@vercel/commerce/api/endpoints/login' -import type { LoginSchema } from '../../../types/login' +import type { LoginSchema } from '@vercel/commerce/types/login' import type { CommercejsAPI } from '../..' import login from './login' diff --git a/packages/commercejs/src/api/endpoints/login/login.ts b/packages/commercejs/src/api/endpoints/login/login.ts index b9088ad22..c2abbc5cb 100644 --- a/packages/commercejs/src/api/endpoints/login/login.ts +++ b/packages/commercejs/src/api/endpoints/login/login.ts @@ -1,32 +1,33 @@ +import type { LoginEndpoint } from '.' + import { serialize } from 'cookie' + import sdkFetcherFunction from '../../utils/sdk-fetch' import { getDeploymentUrl } from '../../../utils/get-deployment-url' -import type { LoginEndpoint } from '.' const login: LoginEndpoint['handlers']['login'] = async ({ req, - res, config: { sdkFetch, customerCookie }, }) => { const sdkFetcher: typeof sdkFetcherFunction = sdkFetch const redirectUrl = getDeploymentUrl() - try { - const loginToken = req.query?.token as string - if (!loginToken) { - res.redirect(redirectUrl) - } - const { jwt } = await sdkFetcher('customer', 'getToken', loginToken, false) - res.setHeader( - 'Set-Cookie', - serialize(customerCookie, jwt, { + const { searchParams } = new URL(req.url) + const loginToken = searchParams.get('token') + + if (!loginToken) { + return { redirectTo: redirectUrl } + } + + const { jwt } = await sdkFetcher('customer', 'getToken', loginToken, false) + + return { + headers: { + 'Set-Cookie': serialize(customerCookie, jwt, { secure: process.env.NODE_ENV === 'production', maxAge: 60 * 60 * 24, path: '/', - }) - ) - res.redirect(redirectUrl) - } catch { - res.redirect(redirectUrl) + }), + }, } } diff --git a/packages/commercejs/src/api/endpoints/logout/index.ts b/packages/commercejs/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/signup/index.ts b/packages/commercejs/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/endpoints/wishlist/index.tsx b/packages/commercejs/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/commercejs/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/commercejs/src/api/operations/get-all-pages.ts b/packages/commercejs/src/api/operations/get-all-pages.ts index c8c9e41b2..ae6e6c004 100644 --- a/packages/commercejs/src/api/operations/get-all-pages.ts +++ b/packages/commercejs/src/api/operations/get-all-pages.ts @@ -1,5 +1,5 @@ import type { CommercejsConfig } from '..' -import { GetAllPagesOperation } from '../../types/page' +import { GetAllPagesOperation } from '@vercel/commerce/types/page' export type Page = { url: string } export type GetAllPagesResult = { pages: Page[] } diff --git a/packages/commercejs/src/api/operations/get-all-product-paths.ts b/packages/commercejs/src/api/operations/get-all-product-paths.ts index 03b7eee96..2d81e9ad6 100644 --- a/packages/commercejs/src/api/operations/get-all-product-paths.ts +++ b/packages/commercejs/src/api/operations/get-all-product-paths.ts @@ -1,9 +1,5 @@ import type { OperationContext } from '@vercel/commerce/api/operations' -import type { - GetAllProductPathsOperation, - CommercejsProduct, -} from '../../types/product' - +import type { GetAllProductPathsOperation } from '@vercel/commerce/types/product' import type { CommercejsConfig, Provider } from '..' export type GetAllProductPathsResult = { @@ -22,7 +18,7 @@ export default function getAllProductPathsOperation({ const { data } = await sdkFetch('products', 'list') // Match a path for every product retrieved - const productPaths = data.map(({ permalink }: CommercejsProduct) => ({ + const productPaths = data.map(({ permalink }: { permalink: string }) => ({ path: `/${permalink}`, })) diff --git a/packages/commercejs/src/api/operations/get-all-products.ts b/packages/commercejs/src/api/operations/get-all-products.ts index 485ea22ee..244a590b8 100644 --- a/packages/commercejs/src/api/operations/get-all-products.ts +++ b/packages/commercejs/src/api/operations/get-all-products.ts @@ -1,5 +1,5 @@ import type { OperationContext } from '@vercel/commerce/api/operations' -import type { GetAllProductsOperation } from '../../types/product' +import type { GetAllProductsOperation } from '@vercel/commerce/types/product' import type { CommercejsConfig, Provider } from '../index' import { normalizeProduct } from '../../utils/normalize-product' diff --git a/packages/commercejs/src/api/operations/get-page.ts b/packages/commercejs/src/api/operations/get-page.ts index f4b69c90d..e403d1660 100644 --- a/packages/commercejs/src/api/operations/get-page.ts +++ b/packages/commercejs/src/api/operations/get-page.ts @@ -1,4 +1,4 @@ -import { GetPageOperation } from '../../types/page' +import { GetPageOperation } from '@vercel/commerce/types/page' export type Page = any export type GetPageResult = { page?: Page } diff --git a/packages/commercejs/src/api/operations/get-product.ts b/packages/commercejs/src/api/operations/get-product.ts index c8fa5901b..7f11310f9 100644 --- a/packages/commercejs/src/api/operations/get-product.ts +++ b/packages/commercejs/src/api/operations/get-product.ts @@ -1,5 +1,5 @@ import type { OperationContext } from '@vercel/commerce/api/operations' -import type { GetProductOperation } from '../../types/product' +import type { GetProductOperation } from '@vercel/commerce/types/product' import type { CommercejsConfig, Provider } from '../index' import { normalizeProduct } from '../../utils/normalize-product' diff --git a/packages/commercejs/src/api/operations/get-site-info.ts b/packages/commercejs/src/api/operations/get-site-info.ts index 0b4046d7c..f588b2bc8 100644 --- a/packages/commercejs/src/api/operations/get-site-info.ts +++ b/packages/commercejs/src/api/operations/get-site-info.ts @@ -1,5 +1,8 @@ import type { OperationContext } from '@vercel/commerce/api/operations' -import type { Category, GetSiteInfoOperation } from '../../types/site' +import type { + Category, + GetSiteInfoOperation, +} from '@vercel/commerce/types/site' import { normalizeCategory } from '../../utils/normalize-category' import type { CommercejsConfig, Provider } from '../index' @@ -24,7 +27,7 @@ export default function getSiteInfoOperation({ const { sdkFetch } = commerce.getConfig(config) const { data: categories } = await sdkFetch('categories', 'list') - const formattedCategories = categories.map(normalizeCategory) + const formattedCategories = categories?.map(normalizeCategory) ?? [] return { categories: formattedCategories, diff --git a/packages/commercejs/src/cart/use-add-item.tsx b/packages/commercejs/src/cart/use-add-item.tsx index 3bbad1147..0ad21bdc9 100644 --- a/packages/commercejs/src/cart/use-add-item.tsx +++ b/packages/commercejs/src/cart/use-add-item.tsx @@ -2,7 +2,7 @@ import type { AddItemHook } from '@vercel/commerce/types/cart' import type { MutationHook } from '@vercel/commerce/utils/types' import { useCallback } from 'react' import useAddItem, { UseAddItem } from '@vercel/commerce/cart/use-add-item' -import type { CommercejsCart } from '../types/cart' +import type { CommercejsCart } from '../types' import { normalizeCart } from '../utils/normalize-cart' import useCart from './use-cart' @@ -22,17 +22,17 @@ export const handler: MutationHook = { variables.push(item.variantId) } - const { cart } = await fetch<{ cart: CommercejsCart }>({ + const cart = await fetch({ query: options.query, method: options.method, variables, }) + return normalizeCart(cart) }, useHook: ({ fetch }) => function useHook() { const { mutate } = useCart() - return useCallback( async function addItem(input) { const cart = await fetch({ input }) diff --git a/packages/commercejs/src/cart/use-cart.tsx b/packages/commercejs/src/cart/use-cart.tsx index 57592ec37..7938c27f9 100644 --- a/packages/commercejs/src/cart/use-cart.tsx +++ b/packages/commercejs/src/cart/use-cart.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react' import type { GetCartHook } from '@vercel/commerce/types/cart' import { SWRHook } from '@vercel/commerce/utils/types' import useCart, { UseCart } from '@vercel/commerce/cart/use-cart' -import type { CommercejsCart } from '../types/cart' +import type { CommercejsCart } from '../types' import { normalizeCart } from '../utils/normalize-cart' export default useCart as UseCart diff --git a/packages/commercejs/src/cart/use-remove-item.tsx b/packages/commercejs/src/cart/use-remove-item.tsx index c9e57872d..4923be5ab 100644 --- a/packages/commercejs/src/cart/use-remove-item.tsx +++ b/packages/commercejs/src/cart/use-remove-item.tsx @@ -1,8 +1,10 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import type { RemoveItemHook } from '@vercel/commerce/types/cart' -import useRemoveItem, { UseRemoveItem } from '@vercel/commerce/cart/use-remove-item' -import type { CommercejsCart } from '../types/cart' +import useRemoveItem, { + UseRemoveItem, +} from '@vercel/commerce/cart/use-remove-item' +import type { CommercejsCart } from '../types' import { normalizeCart } from '../utils/normalize-cart' import useCart from './use-cart' @@ -14,7 +16,7 @@ export const handler: MutationHook = { method: 'remove', }, async fetcher({ input, options, fetch }) { - const { cart } = await fetch<{ cart: CommercejsCart }>({ + const cart = await fetch({ query: options.query, method: options.method, variables: input.itemId, diff --git a/packages/commercejs/src/cart/use-update-item.tsx b/packages/commercejs/src/cart/use-update-item.tsx index 1546be036..83faac35d 100644 --- a/packages/commercejs/src/cart/use-update-item.tsx +++ b/packages/commercejs/src/cart/use-update-item.tsx @@ -1,4 +1,8 @@ -import type { UpdateItemHook, LineItem } from '@vercel/commerce/types/cart' +import type { + UpdateItemHook, + LineItem, + Cart, +} from '@vercel/commerce/types/cart' import type { HookFetcherContext, MutationHookContext, @@ -6,8 +10,10 @@ import type { import { ValidationError } from '@vercel/commerce/utils/errors' import debounce from 'lodash.debounce' import { useCallback } from 'react' -import useUpdateItem, { UseUpdateItem } from '@vercel/commerce/cart/use-update-item' -import type { CommercejsCart } from '../types/cart' +import useUpdateItem, { + UseUpdateItem, +} from '@vercel/commerce/cart/use-update-item' +import type { CommercejsCart } from '../types' import { normalizeCart } from '../utils/normalize-cart' import useCart from './use-cart' @@ -24,7 +30,7 @@ export const handler = { }, async fetcher({ input, options, fetch }: HookFetcherContext) { const variables = [input.itemId, { quantity: input.item.quantity }] - const { cart } = await fetch<{ cart: CommercejsCart }>({ + const cart = await fetch({ query: options.query, method: options.method, variables, @@ -51,7 +57,7 @@ export const handler = { const variantId = input.productId ?? item?.variantId const quantity = input?.quantity ?? item?.quantity - if (!itemId || !productId || !variantId) { + if (!itemId || !productId) { throw new ValidationError({ message: 'Invalid input for updating cart item', }) @@ -63,7 +69,7 @@ export const handler = { item: { quantity, productId, - variantId, + variantId: variantId ?? '', }, }, }) diff --git a/packages/commercejs/src/checkout/use-submit-checkout.tsx b/packages/commercejs/src/checkout/use-submit-checkout.tsx index 2cb723281..3a2b2c6fe 100644 --- a/packages/commercejs/src/checkout/use-submit-checkout.tsx +++ b/packages/commercejs/src/checkout/use-submit-checkout.tsx @@ -11,7 +11,7 @@ export default useSubmitCheckout as UseSubmitCheckout export const handler: MutationHook = { fetchOptions: { - url: '/api/checkout', + url: '/api/commerce/checkout', method: 'POST', }, async fetcher({ input: item, options, fetch }) { diff --git a/packages/commercejs/src/customer/address/use-add-item.tsx b/packages/commercejs/src/customer/address/use-add-item.tsx index 0f02059b1..4f85c8472 100644 --- a/packages/commercejs/src/customer/address/use-add-item.tsx +++ b/packages/commercejs/src/customer/address/use-add-item.tsx @@ -1,25 +1,17 @@ -import type { AddItemHook } from '@vercel/commerce/types/customer/address' -import type { MutationHook } from '@vercel/commerce/utils/types' -import { useCallback } from 'react' -import useAddItem, { UseAddItem } from '@vercel/commerce/customer/address/use-add-item' -import { useCheckoutContext } from '@components/checkout/context' +import useAddItem, { + UseAddItem, +} from '@vercel/commerce/customer/address/use-add-item' +import { MutationHook } from '@vercel/commerce/utils/types' export default useAddItem as UseAddItem -export const handler: MutationHook = { +export const handler: MutationHook = { fetchOptions: { - query: '_', - method: '_', + query: '', }, - useHook: () => - function useHook() { - const { setAddressFields } = useCheckoutContext() - return useCallback( - async function addItem(input) { - setAddressFields(input) - return undefined - }, - [setAddressFields] - ) - }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), } diff --git a/packages/commercejs/src/customer/card/use-add-item.tsx b/packages/commercejs/src/customer/card/use-add-item.tsx index d4c179b18..77d149eff 100644 --- a/packages/commercejs/src/customer/card/use-add-item.tsx +++ b/packages/commercejs/src/customer/card/use-add-item.tsx @@ -1,25 +1,17 @@ -import type { AddItemHook } from '@vercel/commerce/types/customer/card' -import type { MutationHook } from '@vercel/commerce/utils/types' -import { useCallback } from 'react' -import useAddItem, { UseAddItem } from '@vercel/commerce/customer/card/use-add-item' -import { useCheckoutContext } from '@components/checkout/context' +import useAddItem, { + UseAddItem, +} from '@vercel/commerce/customer/card/use-add-item' +import { MutationHook } from '@vercel/commerce/utils/types' export default useAddItem as UseAddItem -export const handler: MutationHook = { +export const handler: MutationHook = { fetchOptions: { - url: '_', - method: '_', + query: '', }, - useHook: () => - function useHook() { - const { setCardFields } = useCheckoutContext() - return useCallback( - async function addItem(input) { - setCardFields(input) - return undefined - }, - [setCardFields] - ) - }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), } diff --git a/packages/commercejs/src/customer/use-customer.tsx b/packages/commercejs/src/customer/use-customer.tsx index 4906223fd..bfcf79193 100644 --- a/packages/commercejs/src/customer/use-customer.tsx +++ b/packages/commercejs/src/customer/use-customer.tsx @@ -1,9 +1,16 @@ +import type { SWRHook } from '@vercel/commerce/utils/types' +import type { CustomerHook } from '@vercel/commerce/types/customer' + import Cookies from 'js-cookie' -import { decode } from 'jsonwebtoken' -import { SWRHook } from '@vercel/commerce/utils/types' -import useCustomer, { UseCustomer } from '@vercel/commerce/customer/use-customer' +import { decode, type JwtPayload } from 'jsonwebtoken' +import useCustomer, { + type UseCustomer, +} from '@vercel/commerce/customer/use-customer' import { CUSTOMER_COOKIE, API_URL } from '../constants' -import type { CustomerHook } from '../types/customer' + +type JwtData = JwtPayload & { + cid: string +} export default useCustomer as UseCustomer export const handler: SWRHook = { @@ -13,12 +20,14 @@ export const handler: SWRHook = { }, async fetcher({ options, fetch }) { const token = Cookies.get(CUSTOMER_COOKIE) + if (!token) { return null } - const decodedToken = decode(token) as { cid: string } - const customer = await fetch({ + const decodedToken = decode(token) as JwtData + + const customer = await fetch({ query: options.query, method: options.method, variables: [ @@ -29,7 +38,16 @@ export const handler: SWRHook = { token, ], }) + return customer + ? { + id: customer.id, + firstName: customer.firstname, + lastName: customer.lastname, + email: customer.email, + phone: customer.phone, + } + : null }, useHook: ({ useData }) => diff --git a/packages/commercejs/src/product/use-search.tsx b/packages/commercejs/src/product/use-search.tsx index ec8ad618f..4b43d5aa0 100644 --- a/packages/commercejs/src/product/use-search.tsx +++ b/packages/commercejs/src/product/use-search.tsx @@ -1,7 +1,7 @@ import { SWRHook } from '@vercel/commerce/utils/types' import useSearch, { UseSearch } from '@vercel/commerce/product/use-search' import { SearchProductsHook } from '@vercel/commerce/types/product' -import type { CommercejsProduct } from '../types/product' +import type { CommercejsProduct } from '../types' import { getProductSearchVariables } from '../utils/product-search' import { normalizeProduct } from '../utils/normalize-product' diff --git a/packages/commercejs/src/types.ts b/packages/commercejs/src/types.ts new file mode 100644 index 000000000..c041acc0d --- /dev/null +++ b/packages/commercejs/src/types.ts @@ -0,0 +1,6 @@ +export type { Cart as CommercejsCart } from '@chec/commerce.js/types/cart' +export type { LineItem as CommercejsLineItem } from '@chec/commerce.js/types/line-item' +export type { CheckoutCapture as CommercejsCheckoutCapture } from '@chec/commerce.js/types/checkout-capture' +export type { Product as CommercejsProduct } from '@chec/commerce.js/types/product' +export type { Variant as CommercejsVariant } from '@chec/commerce.js/types/variant' +export type { Category as CommercejsCategory } from '@chec/commerce.js/types/category' diff --git a/packages/commercejs/src/types/cart.ts b/packages/commercejs/src/types/cart.ts deleted file mode 100644 index 9de68397b..000000000 --- a/packages/commercejs/src/types/cart.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from '@vercel/commerce/types/cart' - -export type { Cart as CommercejsCart } from '@chec/commerce.js/types/cart' -export type { LineItem as CommercejsLineItem } from '@chec/commerce.js/types/line-item' diff --git a/packages/commercejs/src/types/checkout.ts b/packages/commercejs/src/types/checkout.ts deleted file mode 100644 index 970d5cfad..000000000 --- a/packages/commercejs/src/types/checkout.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from '@vercel/commerce/types/checkout' - -export type { CheckoutCapture as CommercejsCheckoutCapture } from '@chec/commerce.js/types/checkout-capture' diff --git a/packages/commercejs/src/types/common.ts b/packages/commercejs/src/types/common.ts deleted file mode 100644 index 23b8daa11..000000000 --- a/packages/commercejs/src/types/common.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/common' diff --git a/packages/commercejs/src/types/customer.ts b/packages/commercejs/src/types/customer.ts deleted file mode 100644 index c637055b9..000000000 --- a/packages/commercejs/src/types/customer.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/customer' diff --git a/packages/commercejs/src/types/index.ts b/packages/commercejs/src/types/index.ts deleted file mode 100644 index 7ab0b7f64..000000000 --- a/packages/commercejs/src/types/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as Cart from './cart' -import * as Checkout from './checkout' -import * as Common from './common' -import * as Customer from './customer' -import * as Login from './login' -import * as Logout from './logout' -import * as Page from './page' -import * as Product from './product' -import * as Signup from './signup' -import * as Site from './site' -import * as Wishlist from './wishlist' - -export type { - Cart, - Checkout, - Common, - Customer, - Login, - Logout, - Page, - Product, - Signup, - Site, - Wishlist, -} diff --git a/packages/commercejs/src/types/login.ts b/packages/commercejs/src/types/login.ts deleted file mode 100644 index 0706a2f1f..000000000 --- a/packages/commercejs/src/types/login.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { LoginBody, LoginTypes } from '@vercel/commerce/types/login' -export * from '@vercel/commerce/types/login' - -export type LoginHook = { - data: null - actionInput: LoginBody - fetcherInput: LoginBody - body: T['body'] -} diff --git a/packages/commercejs/src/types/logout.ts b/packages/commercejs/src/types/logout.ts deleted file mode 100644 index 1de06f8dc..000000000 --- a/packages/commercejs/src/types/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/logout' diff --git a/packages/commercejs/src/types/page.ts b/packages/commercejs/src/types/page.ts deleted file mode 100644 index 12f6b02d7..000000000 --- a/packages/commercejs/src/types/page.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/page' diff --git a/packages/commercejs/src/types/product.ts b/packages/commercejs/src/types/product.ts deleted file mode 100644 index 7cdab703e..000000000 --- a/packages/commercejs/src/types/product.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from '@vercel/commerce/types/product' - -export type { Product as CommercejsProduct } from '@chec/commerce.js/types/product' -export type { Variant as CommercejsVariant } from '@chec/commerce.js/types/variant' diff --git a/packages/commercejs/src/types/signup.ts b/packages/commercejs/src/types/signup.ts deleted file mode 100644 index 3f0d1af5a..000000000 --- a/packages/commercejs/src/types/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/signup' diff --git a/packages/commercejs/src/types/site.ts b/packages/commercejs/src/types/site.ts deleted file mode 100644 index 346278b43..000000000 --- a/packages/commercejs/src/types/site.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from '@vercel/commerce/types/site' - -export type { Category as CommercejsCategory } from '@chec/commerce.js/types/category' diff --git a/packages/commercejs/src/types/wishlist.ts b/packages/commercejs/src/types/wishlist.ts deleted file mode 100644 index af92d9f63..000000000 --- a/packages/commercejs/src/types/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/wishlist' diff --git a/packages/commercejs/src/utils/normalize-cart.ts b/packages/commercejs/src/utils/normalize-cart.ts index c01ea6dea..909fa8335 100644 --- a/packages/commercejs/src/utils/normalize-cart.ts +++ b/packages/commercejs/src/utils/normalize-cart.ts @@ -1,9 +1,5 @@ -import type { - Cart, - LineItem, - CommercejsCart, - CommercejsLineItem, -} from '../types/cart' +import type { Cart, LineItem } from '@vercel/commerce/types/cart' +import type { CommercejsCart, CommercejsLineItem } from '../types' type CommercejsLineItemType = CommercejsLineItem & { image: { url: string } } @@ -48,14 +44,16 @@ const normalizeLineItem = ( } } -export const normalizeCart = (commercejsCart: CommercejsCart): Cart => { +export const normalizeCart = ( + commercejsCart: CommercejsCart | { cart: CommercejsCart } +): Cart => { const { id, created, subtotal: { raw: rawPrice }, currency, line_items, - } = commercejsCart + } = 'cart' in commercejsCart ? commercejsCart.cart : commercejsCart return { id, diff --git a/packages/commercejs/src/utils/normalize-category.ts b/packages/commercejs/src/utils/normalize-category.ts index 41900928e..9c2c6bd91 100644 --- a/packages/commercejs/src/utils/normalize-category.ts +++ b/packages/commercejs/src/utils/normalize-category.ts @@ -9,6 +9,6 @@ export function normalizeCategory( id, name, slug, - path: slug, + path: `/${slug}`, } } diff --git a/packages/commercejs/src/utils/normalize-checkout.ts b/packages/commercejs/src/utils/normalize-checkout.ts index db136e0b8..5120bee2e 100644 --- a/packages/commercejs/src/utils/normalize-checkout.ts +++ b/packages/commercejs/src/utils/normalize-checkout.ts @@ -1,6 +1,6 @@ import type { CardFields } from '@vercel/commerce/types/customer/card' import type { AddressFields } from '@vercel/commerce/types/customer/address' -import type { CommercejsCheckoutCapture } from '../types/checkout' +import type { CommercejsCheckoutCapture } from '../types' /** * Creates a checkout payload suitable for test checkouts. diff --git a/packages/commercejs/src/utils/normalize-product.ts b/packages/commercejs/src/utils/normalize-product.ts index 86c42d922..97f5d4027 100644 --- a/packages/commercejs/src/utils/normalize-product.ts +++ b/packages/commercejs/src/utils/normalize-product.ts @@ -1,8 +1,5 @@ -import type { - Product, - CommercejsProduct, - CommercejsVariant, -} from '../types/product' +import type { Product } from '@vercel/commerce/types/product' +import type { CommercejsProduct, CommercejsVariant } from '../types' function getOptionsFromVariantGroups( variantGroups: CommercejsProduct['variant_groups'] @@ -26,6 +23,7 @@ function normalizeVariants( if (!Array.isArray(variants)) return [] return variants?.map((variant) => ({ id: variant.id, + sku: variant.sku ?? variant.id, options: Object.entries(variant.options).map( ([variantGroupId, variantOptionId]) => { const variantGroupFromId = variantGroups.find( @@ -56,22 +54,27 @@ export function normalizeProduct( ): Product { const { id, name, description, permalink, assets, price, variant_groups } = commercejsProduct + return { id, name, description, descriptionHtml: description, slug: permalink, - path: permalink, - images: assets.map(({ url, description, filename }) => ({ - url, - alt: description || filename, - })), + path: `/${permalink}`, + images: + assets?.map(({ url, description, filename }) => ({ + url, + alt: description || filename, + })) || [], price: { value: price.raw, currencyCode: 'USD', }, - variants: normalizeVariants(commercejsProductVariants, variant_groups), - options: getOptionsFromVariantGroups(variant_groups), + variants: normalizeVariants( + commercejsProductVariants, + variant_groups || [] + ), + options: variant_groups ? getOptionsFromVariantGroups(variant_groups) : [], } } diff --git a/packages/commercejs/src/utils/product-search.ts b/packages/commercejs/src/utils/product-search.ts index 9a4d42982..ebef3f7ed 100644 --- a/packages/commercejs/src/utils/product-search.ts +++ b/packages/commercejs/src/utils/product-search.ts @@ -4,8 +4,8 @@ const getFilterVariables = ({ search, categoryId, }: { - search?: string - categoryId?: string | number + search?: string | null + categoryId?: string | number | null }) => { let filterVariables: { [key: string]: any } = {} if (search) { @@ -17,7 +17,7 @@ const getFilterVariables = ({ return filterVariables } -const getSortVariables = ({ sort }: { sort?: string }) => { +const getSortVariables = ({ sort }: { sort?: string | null }) => { let sortVariables: { [key: string]: any } = {} switch (sort) { case 'trending-desc': diff --git a/packages/commercejs/src/wishlist/use-wishlist.tsx b/packages/commercejs/src/wishlist/use-wishlist.tsx index 781614394..2175a8c8e 100644 --- a/packages/commercejs/src/wishlist/use-wishlist.tsx +++ b/packages/commercejs/src/wishlist/use-wishlist.tsx @@ -1,16 +1,6 @@ +import type { Wishlist } from '@vercel/commerce/types/wishlist' import { HookFetcher } from '@vercel/commerce/utils/types' -export type Wishlist = { - items: [ - { - product_id: number - variant_id: number - id: number - product: any - } - ] -} - export interface UseWishlistOptions { includeProducts?: boolean } diff --git a/packages/kibocommerce/package.json b/packages/kibocommerce/package.json index 6a2912814..aa8b3ca9e 100644 --- a/packages/kibocommerce/package.json +++ b/packages/kibocommerce/package.json @@ -49,17 +49,17 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", + "@vercel/commerce": "workspace:*", "lodash.debounce": "^4.0.8" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { - "@graphql-codegen/cli": "^2.3.1", + "@babel/core": "^7.20.5", + "@graphql-codegen/cli": "^2.7.0", "@graphql-codegen/schema-ast": "^2.4.1", "@graphql-codegen/typescript": "^2.4.2", "@graphql-codegen/typescript-operations": "^2.2.2", @@ -68,15 +68,18 @@ "@taskr/watch": "^1.1.0", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "2.6.2", + "@types/react": "^18.0.14", + "graphql": "^16.0.0", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "ts-node": "^10.9.1", + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/kibocommerce/src/api/endpoints/cart/add-item.ts b/packages/kibocommerce/src/api/endpoints/cart/add-item.ts index 6dfea1e0c..d1609179d 100644 --- a/packages/kibocommerce/src/api/endpoints/cart/add-item.ts +++ b/packages/kibocommerce/src/api/endpoints/cart/add-item.ts @@ -53,28 +53,19 @@ const buildAddToCartVariables = ({ const addItem: CartEndpoint['handlers']['addItem'] = async ({ req, - res, - body: { cartId, item }, + body: { item }, config, }) => { - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - if (!item.quantity) item.quantity = 1 - const productResponse = await config.fetch(getProductQuery, { variables: { productCode: item?.productId }, }) - const cookieHandler = new CookieHandler(config, req, res) + const cookieHandler = new CookieHandler(config, req) let accessToken = null if (!cookieHandler.getAccessToken()) { let anonymousShopperTokenResponse = await cookieHandler.getAnonymousToken() - accessToken = anonymousShopperTokenResponse.accessToken; + accessToken = anonymousShopperTokenResponse.accessToken } else { accessToken = cookieHandler.getAccessToken() } @@ -95,7 +86,8 @@ const addItem: CartEndpoint['handlers']['addItem'] = async ({ ) currentCart = result?.data?.currentCart } - res.status(200).json({ data: normalizeCart(currentCart) }) + + return { data: normalizeCart(currentCart) } } export default addItem diff --git a/packages/kibocommerce/src/api/endpoints/cart/get-cart.ts b/packages/kibocommerce/src/api/endpoints/cart/get-cart.ts index 6a6ec3ab4..f121f931b 100644 --- a/packages/kibocommerce/src/api/endpoints/cart/get-cart.ts +++ b/packages/kibocommerce/src/api/endpoints/cart/get-cart.ts @@ -6,17 +6,17 @@ import { getCartQuery } from '../../queries/get-cart-query' const getCart: CartEndpoint['handlers']['getCart'] = async ({ req, - res, - body: { cartId }, config, }) => { let currentCart: Cart = {} + let headers try { - const cookieHandler = new CookieHandler(config, req, res) + const cookieHandler = new CookieHandler(config, req) let accessToken = null if (!cookieHandler.getAccessToken()) { - let anonymousShopperTokenResponse = await cookieHandler.getAnonymousToken() + let anonymousShopperTokenResponse = + await cookieHandler.getAnonymousToken() const response = anonymousShopperTokenResponse.response accessToken = anonymousShopperTokenResponse.accessToken cookieHandler.setAnonymousShopperCookie(response) @@ -30,12 +30,14 @@ const getCart: CartEndpoint['handlers']['getCart'] = async ({ { headers: { 'x-vol-user-claims': accessToken } } ) currentCart = result?.data?.currentCart + headers = cookieHandler.headers } catch (error) { throw error } - res.status(200).json({ + + return { data: currentCart ? normalizeCart(currentCart) : null, - }) + } } export default getCart diff --git a/packages/kibocommerce/src/api/endpoints/cart/index.ts b/packages/kibocommerce/src/api/endpoints/cart/index.ts index d4e8118ac..191ce2130 100644 --- a/packages/kibocommerce/src/api/endpoints/cart/index.ts +++ b/packages/kibocommerce/src/api/endpoints/cart/index.ts @@ -1,8 +1,8 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import cartEndpoint from '@vercel/commerce/api/endpoints/cart' import type { KiboCommerceAPI } from '../..' -import getCart from './get-cart'; -import addItem from './add-item'; +import getCart from './get-cart' +import addItem from './add-item' import updateItem from './update-item' import removeItem from './remove-item' diff --git a/packages/kibocommerce/src/api/endpoints/cart/remove-item.ts b/packages/kibocommerce/src/api/endpoints/cart/remove-item.ts index 62f6afdc6..a7bef8b56 100644 --- a/packages/kibocommerce/src/api/endpoints/cart/remove-item.ts +++ b/packages/kibocommerce/src/api/endpoints/cart/remove-item.ts @@ -5,17 +5,11 @@ import { getCartQuery } from '../../../api/queries/get-cart-query' const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ req, - res, - body: { cartId, itemId }, + body: { itemId }, config, }) => { - if (!itemId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - const encodedToken = req.cookies[config.customerCookie] + const encodedToken = req.cookies.get(config.customerCookie)?.value + const token = encodedToken ? Buffer.from(encodedToken, 'base64').toString('ascii') : null @@ -39,7 +33,10 @@ const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ ) currentCart = result?.data?.currentCart } - res.status(200).json({ data: normalizeCart(currentCart) }) + + return { + data: normalizeCart(currentCart), + } } export default removeItem diff --git a/packages/kibocommerce/src/api/endpoints/cart/update-item.ts b/packages/kibocommerce/src/api/endpoints/cart/update-item.ts index b42ff3430..7d22ae18c 100644 --- a/packages/kibocommerce/src/api/endpoints/cart/update-item.ts +++ b/packages/kibocommerce/src/api/endpoints/cart/update-item.ts @@ -5,17 +5,10 @@ import updateCartItemQuantityMutation from '../../../api/mutations/updateCartIte const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ req, - res, - body: { cartId, itemId, item }, + body: { itemId, item }, config, }) => { - if (!itemId || !item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - const encodedToken = req.cookies[config.customerCookie] + const encodedToken = req.cookies.get(config.cartCookie)?.value const token = encodedToken ? Buffer.from(encodedToken, 'base64').toString('ascii') : null @@ -39,7 +32,8 @@ const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ ) currentCart = result?.data?.currentCart } - res.status(200).json({ data: normalizeCart(currentCart) }) + + return { data: normalizeCart(currentCart) } } export default updateItem diff --git a/packages/kibocommerce/src/api/endpoints/catalog/products/products.ts b/packages/kibocommerce/src/api/endpoints/catalog/products/products.ts index 189922d53..8009f82f1 100644 --- a/packages/kibocommerce/src/api/endpoints/catalog/products/products.ts +++ b/packages/kibocommerce/src/api/endpoints/catalog/products/products.ts @@ -2,16 +2,15 @@ import { Product } from '@vercel/commerce/types/product' import { ProductsEndpoint } from '.' import productSearchQuery from '../../../queries/product-search-query' import { buildProductSearchVars } from '../../../../lib/product-search-vars' -import {normalizeProduct} from '../../../../lib/normalize' +import { normalizeProduct } from '../../../../lib/normalize' const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ - res, body: { search, categoryId, brandId, sort }, config, }) => { - const pageSize = 100; - const filters = {}; - const startIndex = 0; + const pageSize = 100 + const filters = {} + const startIndex = 0 const variables = buildProductSearchVars({ categoryCode: categoryId, pageSize, @@ -20,12 +19,14 @@ const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ filters, startIndex, }) - const {data} = await config.fetch(productSearchQuery, { variables }); - const found = data?.products?.items?.length > 0 ? true : false; - let productsResponse= data?.products?.items.map((item: any) =>normalizeProduct(item,config)); - const products: Product[] = found ? productsResponse : []; + const { data } = await config.fetch(productSearchQuery, { variables }) + const found = data?.products?.items?.length > 0 ? true : false + let productsResponse = data?.products?.items.map((item: any) => + normalizeProduct(item, config) + ) + const products: Product[] = found ? productsResponse : [] - res.status(200).json({ data: { products, found } }); + return { data: { products, found } } } export default getProducts diff --git a/packages/kibocommerce/src/api/endpoints/checkout/index.ts b/packages/kibocommerce/src/api/endpoints/checkout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/kibocommerce/src/api/endpoints/checkout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/kibocommerce/src/api/endpoints/customer/address.ts b/packages/kibocommerce/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/kibocommerce/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/kibocommerce/src/api/endpoints/customer/card.ts b/packages/kibocommerce/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/kibocommerce/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/kibocommerce/src/api/endpoints/customer/customer.ts b/packages/kibocommerce/src/api/endpoints/customer/customer.ts index c2e6db707..f8a8106cc 100644 --- a/packages/kibocommerce/src/api/endpoints/customer/customer.ts +++ b/packages/kibocommerce/src/api/endpoints/customer/customer.ts @@ -2,35 +2,32 @@ import CookieHandler from '../../../api/utils/cookie-handler' import type { CustomerEndpoint } from '.' import { getCustomerAccountQuery } from '../../queries/get-customer-account-query' import { normalizeCustomer } from '../../../lib/normalize' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' -const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = async ({ - req, - res, - config, -}) => { - const cookieHandler = new CookieHandler(config, req, res) - let accessToken = cookieHandler.getAccessToken(); +const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = + async ({ req, config }) => { + const cookieHandler = new CookieHandler(config, req) + let accessToken = cookieHandler.getAccessToken() - if (!cookieHandler.isShopperCookieAnonymous()) { - const { data } = await config.fetch(getCustomerAccountQuery, undefined, { - headers: { - 'x-vol-user-claims': accessToken, - }, - }) - - const customer = normalizeCustomer(data?.customerAccount) - - if (!customer.id) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Customer not found', code: 'not_found' }], + if (!cookieHandler.isShopperCookieAnonymous()) { + const { data } = await config.fetch(getCustomerAccountQuery, undefined, { + headers: { + 'x-vol-user-claims': accessToken, + }, }) + + const customer = normalizeCustomer(data?.customerAccount) + + if (!customer.id) { + throw new CommerceAPIError('Customer not found', { + status: 404, + }) + } + + return { data: { customer } } } - return res.status(200).json({ data: { customer } }) + return { data: null } } - res.status(200).json({ data: null }) -} - export default getLoggedInCustomer diff --git a/packages/kibocommerce/src/api/endpoints/customer/index.ts b/packages/kibocommerce/src/api/endpoints/customer/index.ts index 20bd44da9..a329f66b8 100644 --- a/packages/kibocommerce/src/api/endpoints/customer/index.ts +++ b/packages/kibocommerce/src/api/endpoints/customer/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import customerEndpoint from '@vercel/commerce/api/endpoints/customer' -import type { CustomerSchema } from '../../../types/customer' +import type { CustomerSchema } from '@vercel/commerce/types/customer' import type { KiboCommerceAPI } from '../..' import getLoggedInCustomer from './customer' diff --git a/packages/kibocommerce/src/api/endpoints/index.ts b/packages/kibocommerce/src/api/endpoints/index.ts new file mode 100644 index 000000000..3160f3da6 --- /dev/null +++ b/packages/kibocommerce/src/api/endpoints/index.ts @@ -0,0 +1,25 @@ +import type { KiboCommerceAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' + +import cart from './cart' +import login from './login' +import logout from './logout' +import signup from './signup' +import customer from './customer' +import wishlist from './wishlist' +import products from './catalog/products' + +const endpoints = { + cart, + login, + logout, + signup, + wishlist, + customer, + 'catalog/products': products, +} + +export default function kiboCommerceAPI(commerce: KiboCommerceAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/kibocommerce/src/api/endpoints/login/index.ts b/packages/kibocommerce/src/api/endpoints/login/index.ts index 679a92d90..73e89ebdd 100644 --- a/packages/kibocommerce/src/api/endpoints/login/index.ts +++ b/packages/kibocommerce/src/api/endpoints/login/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import loginEndpoint from '@vercel/commerce/api/endpoints/login' -import type { LoginSchema } from '../../../types/login' +import type { LoginSchema } from '@vercel/commerce/types/login' import type { KiboCommerceAPI } from '../..' import login from './login' @@ -15,6 +15,4 @@ const loginApi = createEndpoint({ handlers, }) -export default loginApi; - - +export default loginApi diff --git a/packages/kibocommerce/src/api/endpoints/login/login.ts b/packages/kibocommerce/src/api/endpoints/login/login.ts index 7a08069c6..f88f8d2a2 100644 --- a/packages/kibocommerce/src/api/endpoints/login/login.ts +++ b/packages/kibocommerce/src/api/endpoints/login/login.ts @@ -1,66 +1,53 @@ -import { FetcherError } from '@vercel/commerce/utils/errors' import type { LoginEndpoint } from '.' + +import { FetcherError } from '@vercel/commerce/utils/errors' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' + import { loginMutation } from '../../mutations/login-mutation' -import { prepareSetCookie } from '../../../lib/prepare-set-cookie'; -import { setCookies } from '../../../lib/set-cookie' +import { prepareSetCookie } from '../../../lib/prepare-set-cookie' import { getCookieExpirationDate } from '../../../lib/get-cookie-expiration-date' const invalidCredentials = /invalid credentials/i const login: LoginEndpoint['handlers']['login'] = async ({ - req, - res, body: { email, password }, config, - commerce, }) => { - - if (!(email && password)) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - - let response; + let response try { - - const variables = { loginInput : { username: email, password }}; - response = await config.fetch(loginMutation, { variables }) - const { account: token } = response.data; + const variables = { loginInput: { username: email, password } } + response = await config.fetch(loginMutation, { variables }) + const { account: token } = response.data // Set Cookie - const cookieExpirationDate = getCookieExpirationDate(config.customerCookieMaxAgeInDays) + const cookieExpirationDate = getCookieExpirationDate( + config.customerCookieMaxAgeInDays + ) const authCookie = prepareSetCookie( config.customerCookie, JSON.stringify(token), - token.accessTokenExpiration ? { expires: cookieExpirationDate }: {}, + token.accessTokenExpiration ? { expires: cookieExpirationDate } : {} ) - setCookies(res, [authCookie]) + return { data: null, headers: { 'Set-Cookie': authCookie } } } catch (error) { // Check if the email and password didn't match an existing account if ( error instanceof FetcherError && invalidCredentials.test(error.message) ) { - return res.status(401).json({ - data: null, - errors: [ - { - message: - 'Cannot find an account that matches the provided credentials', - code: 'invalid_credentials', - }, - ], - }) + throw new CommerceAPIError( + 'Cannot find an account that matches the provided credentials', + { + status: 401, + code: 'invalid_credentials', + } + ) + } else { + throw error } - - throw error } - - res.status(200).json({ data: response }) } export default login diff --git a/packages/kibocommerce/src/api/endpoints/logout/index.ts b/packages/kibocommerce/src/api/endpoints/logout/index.ts index 00804afb3..55f68fcbf 100644 --- a/packages/kibocommerce/src/api/endpoints/logout/index.ts +++ b/packages/kibocommerce/src/api/endpoints/logout/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import logoutEndpoint from '@vercel/commerce/api/endpoints/logout' -import type { LogoutSchema } from '../../../types/logout' +import type { LogoutSchema } from '@vercel/commerce/types/logout' import type { KiboCommerceAPI } from '../..' import logout from './logout' diff --git a/packages/kibocommerce/src/api/endpoints/logout/logout.ts b/packages/kibocommerce/src/api/endpoints/logout/logout.ts index 1b0835e39..27b56a2c1 100644 --- a/packages/kibocommerce/src/api/endpoints/logout/logout.ts +++ b/packages/kibocommerce/src/api/endpoints/logout/logout.ts @@ -1,22 +1,22 @@ import type { LogoutEndpoint } from '.' -import {prepareSetCookie} from '../../../lib/prepare-set-cookie'; -import {setCookies} from '../../../lib/set-cookie' +import { prepareSetCookie } from '../../../lib/prepare-set-cookie' const logout: LogoutEndpoint['handlers']['logout'] = async ({ - res, body: { redirectTo }, config, }) => { // Remove the cookie - const authCookie = prepareSetCookie(config.customerCookie,'',{ maxAge: -1, path: '/' }) - setCookies(res, [authCookie]) + const authCookie = prepareSetCookie(config.customerCookie, '', { + maxAge: -1, + path: '/', + }) + + const headers = { + 'Set-Cookie': authCookie, + } // Only allow redirects to a relative URL - if (redirectTo?.startsWith('/')) { - res.redirect(redirectTo) - } else { - res.status(200).json({ data: null }) - } + return redirectTo?.startsWith('/') ? { redirectTo, headers } : { headers } } export default logout diff --git a/packages/kibocommerce/src/api/endpoints/signup/index.ts b/packages/kibocommerce/src/api/endpoints/signup/index.ts index 8b2fec006..4b9bd9a0e 100644 --- a/packages/kibocommerce/src/api/endpoints/signup/index.ts +++ b/packages/kibocommerce/src/api/endpoints/signup/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import signupEndpoint from '@vercel/commerce/api/endpoints/signup' -import type { SignupSchema } from '../../../types/signup' +import type { SignupSchema } from '@vercel/commerce/types/signup' import type { KiboCommerceAPI } from '../..' import signup from './signup' diff --git a/packages/kibocommerce/src/api/endpoints/signup/signup.ts b/packages/kibocommerce/src/api/endpoints/signup/signup.ts index b3d988475..62d46838f 100644 --- a/packages/kibocommerce/src/api/endpoints/signup/signup.ts +++ b/packages/kibocommerce/src/api/endpoints/signup/signup.ts @@ -1,91 +1,89 @@ -import { FetcherError } from '@vercel/commerce/utils/errors' import type { SignupEndpoint } from '.' -import { registerUserMutation, registerUserLoginMutation } from '../../mutations/signup-mutation' -import { prepareSetCookie } from '../../../lib/prepare-set-cookie'; -import { setCookies } from '../../../lib/set-cookie' + +import { FetcherError } from '@vercel/commerce/utils/errors' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' + +import { + registerUserMutation, + registerUserLoginMutation, +} from '../../mutations/signup-mutation' +import { prepareSetCookie } from '../../../lib/prepare-set-cookie' import { getCookieExpirationDate } from '../../../lib/get-cookie-expiration-date' const invalidCredentials = /invalid credentials/i const signup: SignupEndpoint['handlers']['signup'] = async ({ - req, - res, body: { email, password, firstName, lastName }, config, - commerce, }) => { - - if (!(email && password)) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - - let response; + let response try { - // Register user const registerUserVariables = { customerAccountInput: { - emailAddress: email, - firstName: firstName, - lastName: lastName, - acceptsMarketing: true, - id: 0 - } + emailAddress: email, + firstName: firstName, + lastName: lastName, + acceptsMarketing: true, + id: 0, + }, } - const registerUserResponse = await config.fetch(registerUserMutation, { variables: registerUserVariables}) - const accountId = registerUserResponse.data?.account?.id; + const registerUserResponse = await config.fetch(registerUserMutation, { + variables: registerUserVariables, + }) + const accountId = registerUserResponse.data?.account?.id // Login user const registerUserLoginVairables = { accountId: accountId, customerLoginInfoInput: { - emailAddress: email, - username: email, - password: password, - isImport: false - } + emailAddress: email, + username: email, + password: password, + isImport: false, + }, } - response = await config.fetch(registerUserLoginMutation, { variables: registerUserLoginVairables}) - const { account: token } = response.data; + response = await config.fetch(registerUserLoginMutation, { + variables: registerUserLoginVairables, + }) + const { account: token } = response.data // Set Cookie - const cookieExpirationDate = getCookieExpirationDate(config.customerCookieMaxAgeInDays) + const cookieExpirationDate = getCookieExpirationDate( + config.customerCookieMaxAgeInDays + ) const authCookie = prepareSetCookie( config.customerCookie, JSON.stringify(token), - token.accessTokenExpiration ? { expires: cookieExpirationDate }: {}, + token.accessTokenExpiration ? { expires: cookieExpirationDate } : {} ) - setCookies(res, [authCookie]) - + return { + data: response, + headers: { + 'Set-Cookie': authCookie, + }, + } } catch (error) { // Check if the email and password didn't match an existing account if ( error instanceof FetcherError && invalidCredentials.test(error.message) ) { - return res.status(401).json({ - data: null, - errors: [ - { - message: - 'Cannot find an account that matches the provided credentials', - code: 'invalid_credentials', - }, - ], - }) + throw new CommerceAPIError( + 'Cannot find an account that matches the provided credentials', + { + status: 401, + code: 'invalid_credentials', + } + ) + } else { + throw error } - - throw error } - - res.status(200).json({ data: response }) } export default signup diff --git a/packages/kibocommerce/src/api/endpoints/wishlist/add-item.ts b/packages/kibocommerce/src/api/endpoints/wishlist/add-item.ts index 49cfc37d5..f761c519c 100644 --- a/packages/kibocommerce/src/api/endpoints/wishlist/add-item.ts +++ b/packages/kibocommerce/src/api/endpoints/wishlist/add-item.ts @@ -1,17 +1,20 @@ -import getCustomerWishlist from '../../operations/get-customer-wishlist' -import getCustomerId from '../../utils/get-customer-id' import type { WishlistEndpoint } from '.' + +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' + import { normalizeWishlistItem } from '../../../lib/normalize' import { getProductQuery } from '../../../api/queries/get-product-query' -import addItemToWishlistMutation from '../../mutations/addItemToWishlist-mutation' + +import getCustomerId from '../../utils/get-customer-id' import createWishlist from '../../mutations/create-wishlist-mutation' +import addItemToWishlistMutation from '../../mutations/addItemToWishlist-mutation' // Return wishlist info const buildAddToWishlistVariables = ({ productId, variantId, productResponse, - wishlist + wishlist, }: { productId: string variantId: string @@ -23,7 +26,7 @@ const buildAddToWishlistVariables = ({ const selectedOptions = product.variations?.find( (v: any) => v.productCode === variantId ).options - const quantity=1 + const quantity = 1 let options: any[] = [] selectedOptions?.forEach((each: any) => { product?.options @@ -47,53 +50,50 @@ const buildAddToWishlistVariables = ({ productCode: productId, variationProductCode: variantId ? variantId : null, options, - } }, + }, } } const addItem: WishlistEndpoint['handlers']['addItem'] = async ({ - res, body: { customerToken, item }, config, commerce, }) => { - const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; - const accessToken = token ? JSON.parse(token).accessToken : null; + const token = customerToken + ? Buffer.from(customerToken, 'base64').toString('ascii') + : null + const accessToken = token ? JSON.parse(token).accessToken : null let result: { data?: any } = {} let wishlist: any - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - - const customerId = customerToken && (await getCustomerId({ customerToken, config })) - const wishlistName= config.defaultWishlistName + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName = config.defaultWishlistName if (!customerId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) + throw new CommerceAPIError('Customer not found', { status: 404 }) } const wishlistResponse = await commerce.getCustomerWishlist({ variables: { customerId, wishlistName }, config, }) - wishlist= wishlistResponse?.wishlist - if(Object.keys(wishlist).length === 0) { - const createWishlistResponse= await config.fetch(createWishlist, {variables: { - wishlistInput: { - customerAccountId: customerId, - name: wishlistName - } - } - }, {headers: { 'x-vol-user-claims': accessToken } }) - wishlist= createWishlistResponse?.data?.createWishlist + wishlist = wishlistResponse?.wishlist + if (Object.keys(wishlist).length === 0) { + const createWishlistResponse = await config.fetch( + createWishlist, + { + variables: { + wishlistInput: { + customerAccountId: customerId, + name: wishlistName, + }, + }, + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + wishlist = createWishlistResponse?.data?.createWishlist } const productResponse = await config.fetch(getProductQuery, { @@ -103,22 +103,33 @@ const addItem: WishlistEndpoint['handlers']['addItem'] = async ({ const addItemToWishlistResponse = await config.fetch( addItemToWishlistMutation, { - variables: buildAddToWishlistVariables({ ...item, productResponse, wishlist }), + variables: buildAddToWishlistVariables({ + ...item, + productResponse, + wishlist, + }), }, { headers: { 'x-vol-user-claims': accessToken } } ) - if(addItemToWishlistResponse?.data?.createWishlistItem){ - const wishlistResponse= await commerce.getCustomerWishlist({ + if (addItemToWishlistResponse?.data?.createWishlistItem) { + const wishlistResponse = await commerce.getCustomerWishlist({ variables: { customerId, wishlistName }, config, }) - wishlist= wishlistResponse?.wishlist + wishlist = wishlistResponse?.wishlist } - - result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} } - res.status(200).json({ data: result?.data }) + result = { + data: { + ...wishlist, + items: wishlist?.items?.map((item: any) => + normalizeWishlistItem(item, config) + ), + }, + } + + return { data: result?.data } } export default addItem diff --git a/packages/kibocommerce/src/api/endpoints/wishlist/get-wishlist.ts b/packages/kibocommerce/src/api/endpoints/wishlist/get-wishlist.ts index be4c403d9..070327bf0 100644 --- a/packages/kibocommerce/src/api/endpoints/wishlist/get-wishlist.ts +++ b/packages/kibocommerce/src/api/endpoints/wishlist/get-wishlist.ts @@ -1,35 +1,45 @@ import type { WishlistEndpoint } from '.' + +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' import getCustomerId from '../../utils/get-customer-id' import { normalizeWishlistItem } from '../../../lib/normalize' // Return wishlist info const getWishlist: WishlistEndpoint['handlers']['getWishlist'] = async ({ - res, body: { customerToken, includeProducts }, config, commerce, }) => { let result: { data?: any } = {} if (customerToken) { - const customerId = customerToken && (await getCustomerId({ customerToken, config })) - const wishlistName= config.defaultWishlistName + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName = config.defaultWishlistName + if (!customerId) { - // If the customerToken is invalid, then this request is too - return res.status(404).json({ - data: null, - errors: [{ message: 'Wishlist not found' }], + throw new CommerceAPIError('Wishlist not found', { + status: 404, + code: 'not_found', }) } + const { wishlist } = await commerce.getCustomerWishlist({ variables: { customerId, wishlistName }, includeProducts, config, }) - result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config, includeProducts))} } + result = { + data: { + ...wishlist, + items: wishlist?.items?.map((item: any) => + normalizeWishlistItem(item, config, includeProducts) + ), + }, + } } - res.status(200).json({ data: result?.data ?? null }) + return { data: result?.data ?? null } } export default getWishlist diff --git a/packages/kibocommerce/src/api/endpoints/wishlist/remove-item.ts b/packages/kibocommerce/src/api/endpoints/wishlist/remove-item.ts index ae6a8d81c..9e9122cfb 100644 --- a/packages/kibocommerce/src/api/endpoints/wishlist/remove-item.ts +++ b/packages/kibocommerce/src/api/endpoints/wishlist/remove-item.ts @@ -1,60 +1,69 @@ -import getCustomerId from '../../utils/get-customer-id' import type { WishlistEndpoint } from '.' +import { CommerceAPIError } from '@vercel/commerce/api/utils/errors' import { normalizeWishlistItem } from '../../../lib/normalize' +import getCustomerId from '../../utils/get-customer-id' import removeItemFromWishlistMutation from '../../mutations/removeItemFromWishlist-mutation' // Return wishlist info const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({ - res, body: { customerToken, itemId }, config, commerce, }) => { - const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; - const accessToken = token ? JSON.parse(token).accessToken : null; + const token = customerToken + ? Buffer.from(customerToken, 'base64').toString('ascii') + : null + const accessToken = token ? JSON.parse(token).accessToken : null let result: { data?: any } = {} let wishlist: any - const customerId = customerToken && (await getCustomerId({ customerToken, config })) - const wishlistName= config.defaultWishlistName + const customerId = + customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName = config.defaultWishlistName const wishlistResponse = await commerce.getCustomerWishlist({ variables: { customerId, wishlistName }, config, }) - wishlist= wishlistResponse?.wishlist - - if (!wishlist || !itemId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) + wishlist = wishlistResponse?.wishlist + + if (!wishlist) { + throw new CommerceAPIError('Wishlist not found', { status: 404 }) } - const removedItem = wishlist?.items?.find( - (item:any) => { - return item.product.productCode === itemId; - } - ); + + const removedItem = wishlist?.items?.find((item: any) => { + return item.product.productCode === itemId + }) const removeItemFromWishlistResponse = await config.fetch( removeItemFromWishlistMutation, { variables: { wishlistId: wishlist?.id, - wishlistItemId: removedItem?.id + wishlistItemId: removedItem?.id, }, }, { headers: { 'x-vol-user-claims': accessToken } } ) - if(removeItemFromWishlistResponse?.data?.deleteWishlistItem){ - const wishlistResponse= await commerce.getCustomerWishlist({ + if (removeItemFromWishlistResponse?.data?.deleteWishlistItem) { + const wishlistResponse = await commerce.getCustomerWishlist({ variables: { customerId, wishlistName }, config, }) - wishlist= wishlistResponse?.wishlist + wishlist = wishlistResponse?.wishlist + } + result = { + data: { + ...wishlist, + items: wishlist?.items?.map((item: any) => + normalizeWishlistItem(item, config) + ), + }, + } + + return { + data: result?.data, } - result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} } - res.status(200).json({ data: result?.data }) } export default removeItem diff --git a/packages/kibocommerce/src/api/index.ts b/packages/kibocommerce/src/api/index.ts index aa6d9604e..ebb203ad5 100644 --- a/packages/kibocommerce/src/api/index.ts +++ b/packages/kibocommerce/src/api/index.ts @@ -9,16 +9,15 @@ import getCustomerWishlist from './operations/get-customer-wishlist' import getAllProductPaths from './operations/get-all-product-paths' import getAllProducts from './operations/get-all-products' import getProduct from './operations/get-product' -import type { RequestInit } from '@vercel/fetch' export interface KiboCommerceConfig extends CommerceAPIConfig { apiHost?: string clientId?: string sharedSecret?: string - customerCookieMaxAgeInDays: number, - currencyCode: string, - documentListName: string, - defaultWishlistName: string, + customerCookieMaxAgeInDays: number + currencyCode: string + documentListName: string + defaultWishlistName: string authUrl?: string } @@ -37,7 +36,7 @@ const config: KiboCommerceConfig = { sharedSecret: process.env.KIBO_SHARED_SECRET || '', customerCookieMaxAgeInDays: 30, currencyCode: 'USD', - defaultWishlistName: 'My Wishlist' + defaultWishlistName: 'My Wishlist', } const operations = { @@ -55,7 +54,7 @@ export const provider = { config, operations } export type KiboCommerceProvider = typeof provider export type KiboCommerceAPI< P extends KiboCommerceProvider = KiboCommerceProvider - > = CommerceAPI

+> = CommerceAPI

export function getCommerceApi

( customProvider: P = provider as any diff --git a/packages/kibocommerce/src/api/operations/get-all-pages.ts b/packages/kibocommerce/src/api/operations/get-all-pages.ts index 7607e194e..f6d4009d2 100644 --- a/packages/kibocommerce/src/api/operations/get-all-pages.ts +++ b/packages/kibocommerce/src/api/operations/get-all-pages.ts @@ -1,35 +1,29 @@ import type { OperationContext } from '@vercel/commerce/api/operations' import type { KiboCommerceConfig } from '../index' import { getAllPagesQuery } from '../queries/get-all-pages-query' -import { GetPagesQueryParams } from "../../types/page"; import { normalizePage } from '../../lib/normalize' -export type GetAllPagesResult< - T extends { pages: any[] } = { pages: any[] } - > = T +export type GetAllPagesResult = T export default function getAllPagesOperation({ commerce, }: OperationContext) { - async function getAllPages({ query = getAllPagesQuery, config, - variables, }: { url?: string config?: Partial - variables?: GetPagesQueryParams preview?: boolean query?: string } = {}): Promise { const cfg = commerce.getConfig(config) - variables = { - documentListName: cfg.documentListName + const variables = { + documentListName: cfg.documentListName, } - const { data } = await cfg.fetch(query, { variables }); + const { data } = await cfg.fetch(query, { variables }) - const pages = data.documentListDocuments.items.map(normalizePage); + const pages = data.documentListDocuments.items.map(normalizePage) return { pages } } diff --git a/packages/kibocommerce/src/api/operations/get-all-products.ts b/packages/kibocommerce/src/api/operations/get-all-products.ts index bddafbffa..3808ce860 100644 --- a/packages/kibocommerce/src/api/operations/get-all-products.ts +++ b/packages/kibocommerce/src/api/operations/get-all-products.ts @@ -2,7 +2,7 @@ import { Product } from '@vercel/commerce/types/product' import { GetAllProductsOperation } from '@vercel/commerce/types/product' import type { OperationContext } from '@vercel/commerce/api/operations' import type { KiboCommerceConfig } from '../index' -import { getAllProductsQuery } from '../queries/get-all-products-query'; +import { getAllProductsQuery } from '../queries/get-all-products-query' import { normalizeProduct } from '../../lib/normalize' export default function getAllProductsOperation({ @@ -18,11 +18,12 @@ export default function getAllProductsOperation({ config?: Partial preview?: boolean } = {}): Promise<{ products: Product[] | any[] }> { - const cfg = commerce.getConfig(config) - const { data } = await cfg.fetch(query); + const { data } = await cfg.fetch(query) - let normalizedProducts = data.products.items ? data.products.items.map( (item:any) => normalizeProduct(item, cfg)) : []; + let normalizedProducts = data.products.items + ? data.products.items.map((item: any) => normalizeProduct(item, cfg)) + : [] return { products: normalizedProducts, diff --git a/packages/kibocommerce/src/api/operations/get-customer-wishlist.ts b/packages/kibocommerce/src/api/operations/get-customer-wishlist.ts index c2792ad32..1f51d9da1 100644 --- a/packages/kibocommerce/src/api/operations/get-customer-wishlist.ts +++ b/packages/kibocommerce/src/api/operations/get-customer-wishlist.ts @@ -2,14 +2,11 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { - GetCustomerWishlistOperation, - Wishlist, -} from '@vercel/commerce/types/wishlist' +import type { GetCustomerWishlistOperation } from '@vercel/commerce/types/wishlist' // import type { RecursivePartial, RecursiveRequired } from '../utils/types' import { KiboCommerceConfig } from '..' // import getAllProducts, { ProductEdge } from './get-all-products' -import {getCustomerWishlistQuery} from '../queries/get-customer-wishlist-query' +import { getCustomerWishlistQuery } from '../queries/get-customer-wishlist-query' export default function getCustomerWishlistOperation({ commerce, @@ -40,14 +37,15 @@ export default function getCustomerWishlistOperation({ config?: KiboCommerceConfig includeProducts?: boolean }): Promise { - let customerWishlist ={} + let customerWishlist = {} try { - config = commerce.getConfig(config) - const result= await config?.fetch(getCustomerWishlistQuery,{variables}) - customerWishlist= result?.data?.customerWishlist; - } catch(e) { - customerWishlist= {} + const result = await config?.fetch(getCustomerWishlistQuery, { + variables, + }) + customerWishlist = result?.data?.customerWishlist + } catch (e) { + customerWishlist = {} } return { wishlist: customerWishlist as any } diff --git a/packages/kibocommerce/src/api/operations/get-page.ts b/packages/kibocommerce/src/api/operations/get-page.ts index 69289cba0..aed8e02c1 100644 --- a/packages/kibocommerce/src/api/operations/get-page.ts +++ b/packages/kibocommerce/src/api/operations/get-page.ts @@ -1,15 +1,11 @@ -import type { - OperationContext, -} from '@vercel/commerce/api/operations' +import type { OperationContext } from '@vercel/commerce/api/operations' import type { KiboCommerceConfig, KiboCommerceProvider } from '..' import { normalizePage } from '../../lib/normalize' import { getPageQuery } from '../queries/get-page-query' -import type { Page, GetPageQueryParams } from "../../types/page"; +import type { Page, GetPageOperation } from '@vercel/commerce/types/page' import type { Document } from '../../../schema' -export default function getPageOperation({ - commerce, -}: OperationContext) { +export default function getPageOperation({ commerce }: OperationContext) { async function getPage({ url, variables, @@ -17,18 +13,21 @@ export default function getPageOperation({ preview, }: { url?: string - variables: GetPageQueryParams + variables: GetPageOperation['variables'] config?: Partial preview?: boolean }): Promise { // RecursivePartial forces the method to check for every prop in the data, which is // required in case there's a custom `url` const cfg = commerce.getConfig(config) - const pageVariables = { documentListName: cfg.documentListName, filter: `id eq ${variables.id}` } + const pageVariables = { + documentListName: cfg.documentListName, + filter: `id eq ${variables.id}`, + } const { data } = await cfg.fetch(getPageQuery, { variables: pageVariables }) - const firstPage = data.documentListDocuments.items?.[0]; + const firstPage = data.documentListDocuments.items?.[0] const page = firstPage as Document if (preview || page?.properties?.is_visible) { return { page: normalizePage(page as any) } diff --git a/packages/kibocommerce/src/api/operations/get-site-info.ts b/packages/kibocommerce/src/api/operations/get-site-info.ts index 6b72d3b47..bb4b8bddf 100644 --- a/packages/kibocommerce/src/api/operations/get-site-info.ts +++ b/packages/kibocommerce/src/api/operations/get-site-info.ts @@ -1,7 +1,7 @@ import { OperationContext } from '@vercel/commerce/api/operations' import { Category } from '@vercel/commerce/types/site' import { KiboCommerceConfig } from '../index' -import {categoryTreeQuery} from '../queries/get-categories-tree-query' +import { categoryTreeQuery } from '../queries/get-categories-tree-query' import { normalizeCategory } from '../../lib/normalize' export type GetSiteInfoResult< @@ -11,9 +11,11 @@ export type GetSiteInfoResult< } > = T -export default function getSiteInfoOperation({commerce}: OperationContext) { +export default function getSiteInfoOperation({ + commerce, +}: OperationContext) { async function getSiteInfo({ - query= categoryTreeQuery, + query = categoryTreeQuery, variables, config, }: { @@ -23,12 +25,13 @@ export default function getSiteInfoOperation({commerce}: OperationContext) preview?: boolean } = {}): Promise { const cfg = commerce.getConfig(config) - const { data } = await cfg.fetch(query); - const categories= data.categories.items.map(normalizeCategory); - return Promise.resolve({ + const { data } = await cfg.fetch(query) + const categories = data.categories.items.map(normalizeCategory) + + return { categories: categories ?? [], brands: [], - }) + } } return getSiteInfo diff --git a/packages/kibocommerce/src/api/utils/api-auth-helper.ts b/packages/kibocommerce/src/api/utils/api-auth-helper.ts index 20cfc7403..a3644d91a 100644 --- a/packages/kibocommerce/src/api/utils/api-auth-helper.ts +++ b/packages/kibocommerce/src/api/utils/api-auth-helper.ts @@ -1,6 +1,4 @@ import type { KiboCommerceConfig } from '../index' -import type { FetchOptions } from '@vercel/fetch' -import fetch from './fetch' // This object is persisted during development const authCache: { kiboAuthTicket?: AppAuthTicket } = {} @@ -41,11 +39,11 @@ export class APIAuthenticationHelper { this._clientId = clientId this._sharedSecret = sharedSecret this._authUrl = authUrl - if(!authTicketCache) { - this._authTicketCache = new RuntimeMemCache(); + if (!authTicketCache) { + this._authTicketCache = new RuntimeMemCache() } } - private _buildFetchOptions(body: any = {}): FetchOptions { + private _buildFetchOptions(body: any = {}): any { return { method: 'POST', headers: { diff --git a/packages/kibocommerce/src/api/utils/cookie-handler.ts b/packages/kibocommerce/src/api/utils/cookie-handler.ts index b4c950fea..f8d6fce99 100644 --- a/packages/kibocommerce/src/api/utils/cookie-handler.ts +++ b/packages/kibocommerce/src/api/utils/cookie-handler.ts @@ -1,25 +1,25 @@ import { KiboCommerceConfig } from './../index' import { getCookieExpirationDate } from '../../lib/get-cookie-expiration-date' import { prepareSetCookie } from '../../lib/prepare-set-cookie' -import { setCookies } from '../../lib/set-cookie' -import { NextApiRequest } from 'next' + import getAnonymousShopperToken from './get-anonymous-shopper-token' +import type { NextRequest } from 'next/server' const parseCookie = (cookieValue?: any) => { - return cookieValue - ? JSON.parse(Buffer.from(cookieValue, 'base64').toString('ascii')) + return cookieValue + ? JSON.parse(Buffer.from(cookieValue, 'base64').toString('ascii')) : null } export default class CookieHandler { config: KiboCommerceConfig - request: NextApiRequest - response: any + request: NextRequest + headers: HeadersInit | undefined accessToken: any - constructor(config: any, req: NextApiRequest, res: any) { + constructor(config: any, req: NextRequest) { this.config = config this.request = req - this.response = res - const encodedToken = req.cookies[config.customerCookie] + + const encodedToken = req.cookies.get(config.customerCookie)?.value const token = parseCookie(encodedToken) this.accessToken = token ? token.accessToken : null } @@ -36,9 +36,9 @@ export default class CookieHandler { } isShopperCookieAnonymous() { const customerCookieKey = this.config.customerCookie - const shopperCookie = this.request.cookies[customerCookieKey] - const shopperSession = parseCookie(shopperCookie); - const isAnonymous = shopperSession?.customerAccount ? false : true + const shopperCookie = this.request.cookies.get(customerCookieKey)?.value + const shopperSession = parseCookie(shopperCookie) + const isAnonymous = shopperSession?.customerAccount ? false : true return isAnonymous } setAnonymousShopperCookie(anonymousShopperTokenResponse: any) { @@ -53,7 +53,9 @@ export default class CookieHandler { ? { expires: cookieExpirationDate } : {} ) - setCookies(this.response, [authCookie]) + this.headers = { + 'Set-Cookie': authCookie, + } } getAccessToken() { return this.accessToken diff --git a/packages/kibocommerce/src/api/utils/fetch-graphql-api.ts b/packages/kibocommerce/src/api/utils/fetch-graphql-api.ts index cf84f5e41..9f07ef210 100644 --- a/packages/kibocommerce/src/api/utils/fetch-graphql-api.ts +++ b/packages/kibocommerce/src/api/utils/fetch-graphql-api.ts @@ -1,43 +1,51 @@ import { FetcherError } from '@vercel/commerce/utils/errors' -import type { GraphQLFetcher } from '@vercel/commerce/api' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import type { KiboCommerceConfig } from '../index' -import fetch from './fetch' -import { APIAuthenticationHelper } from './api-auth-helper'; + +import { APIAuthenticationHelper } from './api-auth-helper' const fetchGraphqlApi: ( getConfig: () => KiboCommerceConfig -) => GraphQLFetcher = (getConfig) => async ( - query: string, - { variables, preview } = {}, - fetchOptions -) => { - const config = getConfig() - const authHelper = new APIAuthenticationHelper(config); - const apiToken = await authHelper.getAccessToken(); - const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { - ...fetchOptions, - method: 'POST', - headers: { - ...fetchOptions?.headers, - Authorization: `Bearer ${apiToken}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query, - variables, - }), - }) - - const json = await res.json() - if (json.errors) { - console.warn(`Kibo API Request Correlation ID: ${res.headers.get('x-vol-correlation')}`); - throw new FetcherError({ - errors: json.errors ?? [{ message: 'Failed to fetch KiboCommerce API' }], - status: res.status, +) => GraphQLFetcher = + (getConfig) => + async ( + query: string, + { variables, preview } = {}, + options?: FetchOptions + ) => { + const config = getConfig() + const authHelper = new APIAuthenticationHelper(config) + const apiToken = await authHelper.getAccessToken() + const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { + method: options?.method || 'POST', + headers: { + ...options?.headers, + Authorization: `Bearer ${apiToken}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + ...options?.body, + query, + variables, + }), }) + + const json = await res.json() + if (json.errors) { + console.warn( + `Kibo API Request Correlation ID: ${res.headers.get( + 'x-vol-correlation' + )}` + ) + throw new FetcherError({ + errors: json.errors ?? [ + { message: 'Failed to fetch KiboCommerce API' }, + ], + status: res.status, + }) + } + + return { data: json.data, res } } - return { data: json.data, res } -} - export default fetchGraphqlApi diff --git a/packages/kibocommerce/src/api/utils/fetch-local.ts b/packages/kibocommerce/src/api/utils/fetch-local.ts index fa3a214cb..43dca7883 100644 --- a/packages/kibocommerce/src/api/utils/fetch-local.ts +++ b/packages/kibocommerce/src/api/utils/fetch-local.ts @@ -1,19 +1,19 @@ import { FetcherError } from '@vercel/commerce/utils/errors' import type { GraphQLFetcher } from '@vercel/commerce/api' import type { KiboCommerceConfig } from '../index' -import fetch from './fetch' -const fetchGraphqlApi: (getConfig: () => KiboCommerceConfig) => GraphQLFetcher = +const fetchGraphqlApi: ( + getConfig: () => KiboCommerceConfig +) => GraphQLFetcher = (getConfig) => - async (query: string, { variables, preview } = {}, fetchOptions) => { + async (query: string, { variables, preview } = {}, headers?: HeadersInit) => { const config = getConfig() const res = await fetch(config.commerceUrl, { - //const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { - ...fetchOptions, + //const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { method: 'POST', headers: { Authorization: `Bearer ${config.apiToken}`, - ...fetchOptions?.headers, + ...headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ @@ -25,7 +25,9 @@ const fetchGraphqlApi: (getConfig: () => KiboCommerceConfig) => GraphQLFetcher = const json = await res.json() if (json.errors) { throw new FetcherError({ - errors: json.errors ?? [{ message: 'Failed to fetch KiboCommerce API' }], + errors: json.errors ?? [ + { message: 'Failed to fetch KiboCommerce API' }, + ], status: res.status, }) } diff --git a/packages/kibocommerce/src/api/utils/get-customer-id.ts b/packages/kibocommerce/src/api/utils/get-customer-id.ts index 5ba3d7787..f96000976 100644 --- a/packages/kibocommerce/src/api/utils/get-customer-id.ts +++ b/packages/kibocommerce/src/api/utils/get-customer-id.ts @@ -8,17 +8,15 @@ async function getCustomerId({ customerToken: string config: KiboCommerceConfig }): Promise { - const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; - const accessToken = token ? JSON.parse(token).accessToken : null; - const { data } = await config.fetch( - getCustomerAccountQuery, - undefined, - { - headers: { - 'x-vol-user-claims': accessToken, - }, - } - ) + const token = customerToken + ? Buffer.from(customerToken, 'base64').toString('ascii') + : null + const accessToken = token ? JSON.parse(token).accessToken : null + const { data } = await config.fetch(getCustomerAccountQuery, undefined, { + headers: { + 'x-vol-user-claims': accessToken, + }, + }) return data?.customerAccount?.id } diff --git a/packages/kibocommerce/src/auth/use-login.tsx b/packages/kibocommerce/src/auth/use-login.tsx index c9d1fac17..e85404b5d 100644 --- a/packages/kibocommerce/src/auth/use-login.tsx +++ b/packages/kibocommerce/src/auth/use-login.tsx @@ -1,16 +1,16 @@ -import { MutationHook } from '@vercel/commerce/utils/types' -import useLogin, { UseLogin } from '@vercel/commerce/auth/use-login' +import type { MutationHook } from '@vercel/commerce/utils/types' +import useLogin, { type UseLogin } from '@vercel/commerce/auth/use-login' import { useCallback } from 'react' import { CommerceError } from '@vercel/commerce/utils/errors' -import type { LoginHook } from '../types/login' +import type { LoginHook } from '@vercel/commerce/types/login' import useCustomer from '../customer/use-customer' import useCart from '../cart/use-cart' export default useLogin as UseLogin export const handler: MutationHook = { fetchOptions: { - url: '/api/login', + url: '/api/commerce/login', method: 'POST', }, async fetcher({ input: { email, password }, options, fetch }) { diff --git a/packages/kibocommerce/src/auth/use-logout.tsx b/packages/kibocommerce/src/auth/use-logout.tsx index 83e5a4b0c..377180ccc 100644 --- a/packages/kibocommerce/src/auth/use-logout.tsx +++ b/packages/kibocommerce/src/auth/use-logout.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import useLogout, { UseLogout } from '@vercel/commerce/auth/use-logout' -import type { LogoutHook } from '../types/logout' +import type { LogoutHook } from '@vercel/commerce/types/logout' import useCustomer from '../customer/use-customer' import useCart from '../cart/use-cart' @@ -9,21 +9,23 @@ export default useLogout as UseLogout export const handler: MutationHook = { fetchOptions: { - url: '/api/logout', + url: '/api/commerce/logout', method: 'GET', }, - useHook: ({ fetch }) => () => { - const { mutate } = useCustomer() - const { mutate: mutateCart } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCustomer() + const { mutate: mutateCart } = useCart() - return useCallback( - async function logout() { - const data = await fetch() - await mutate(null, false) - await mutateCart(null, false) - return data - }, - [fetch, mutate, mutateCart] - ) - }, + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + await mutateCart(null, false) + return data + }, + [fetch, mutate, mutateCart] + ) + }, } diff --git a/packages/kibocommerce/src/auth/use-signup.tsx b/packages/kibocommerce/src/auth/use-signup.tsx index b06126df6..c8f848907 100644 --- a/packages/kibocommerce/src/auth/use-signup.tsx +++ b/packages/kibocommerce/src/auth/use-signup.tsx @@ -1,15 +1,15 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' -import useSignup, { UseSignup } from '@vercel/commerce/auth/use-signup' -import type { SignupHook } from '../types/signup' +import useSignup, { type UseSignup } from '@vercel/commerce/auth/use-signup' +import type { SignupHook } from '@vercel/commerce/types/signup' import useCustomer from '../customer/use-customer' export default useSignup as UseSignup export const handler: MutationHook = { fetchOptions: { - url: '/api/signup', + url: '/api/commerce/signup', method: 'POST', }, async fetcher({ diff --git a/packages/kibocommerce/src/cart/use-add-item.tsx b/packages/kibocommerce/src/cart/use-add-item.tsx index bb7b8befc..11189ffeb 100644 --- a/packages/kibocommerce/src/cart/use-add-item.tsx +++ b/packages/kibocommerce/src/cart/use-add-item.tsx @@ -9,7 +9,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'POST', }, async fetcher({ input: item, options, fetch }) { @@ -29,16 +29,18 @@ export const handler: MutationHook = { return data }, - useHook: ({ fetch }) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCart() - return useCallback( - async function addItem(input) { - const data = await fetch({ input }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/packages/kibocommerce/src/cart/use-cart.tsx b/packages/kibocommerce/src/cart/use-cart.tsx index 0af0738ec..b8fbede57 100644 --- a/packages/kibocommerce/src/cart/use-cart.tsx +++ b/packages/kibocommerce/src/cart/use-cart.tsx @@ -7,27 +7,29 @@ export default useCart as UseCart export const handler: SWRHook = { fetchOptions: { method: 'GET', - url: '/api/cart', + url: '/api/commerce/cart', }, async fetcher({ options, fetch }) { return await fetch({ ...options }) }, - useHook: ({ useData }) => (input) => { - const response = useData({ - swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, - }) + useHook: + ({ useData }) => + (input) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.lineItems.length ?? 0) <= 0 + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/packages/kibocommerce/src/cart/use-remove-item.tsx b/packages/kibocommerce/src/cart/use-remove-item.tsx index 3fa883c2f..74f893ccb 100644 --- a/packages/kibocommerce/src/cart/use-remove-item.tsx +++ b/packages/kibocommerce/src/cart/use-remove-item.tsx @@ -4,8 +4,14 @@ import type { HookFetcherContext, } from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useRemoveItem, { UseRemoveItem } from '@vercel/commerce/cart/use-remove-item' -import type { Cart, LineItem, RemoveItemHook } from '@vercel/commerce/types/cart' +import useRemoveItem, { + UseRemoveItem, +} from '@vercel/commerce/cart/use-remove-item' +import type { + Cart, + LineItem, + RemoveItemHook, +} from '@vercel/commerce/types/cart' import useCart from './use-cart' export type RemoveItemFn = T extends LineItem @@ -20,7 +26,7 @@ export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'DELETE', }, async fetcher({ @@ -30,27 +36,25 @@ export const handler = { }: HookFetcherContext) { return await fetch({ ...options, body: { itemId } }) }, - useHook: ({ fetch }: MutationHookContext) => < - T extends LineItem | undefined = undefined - >( - ctx: { item?: T } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() - const removeItem: RemoveItemFn = async (input) => { - const itemId = input?.id ?? item?.id + useHook: + ({ fetch }: MutationHookContext) => + (ctx: { item?: T } = {}) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn = async (input) => { + const itemId = input?.id ?? item?.id - if (!itemId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data } - const data = await fetch({ input: { itemId } }) - await mutate(data, false) - return data - } - - return useCallback(removeItem as RemoveItemFn, [fetch, mutate]) - }, + return useCallback(removeItem as RemoveItemFn, [fetch, mutate]) + }, } diff --git a/packages/kibocommerce/src/cart/use-update-item.tsx b/packages/kibocommerce/src/cart/use-update-item.tsx index 931782c4f..f5bfbc410 100644 --- a/packages/kibocommerce/src/cart/use-update-item.tsx +++ b/packages/kibocommerce/src/cart/use-update-item.tsx @@ -5,7 +5,9 @@ import type { HookFetcherContext, } from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useUpdateItem, { UseUpdateItem } from '@vercel/commerce/cart/use-update-item' +import useUpdateItem, { + UseUpdateItem, +} from '@vercel/commerce/cart/use-update-item' import type { LineItem, UpdateItemHook } from '@vercel/commerce/types/cart' import { handler as removeItemHandler } from './use-remove-item' import useCart from './use-cart' @@ -18,7 +20,7 @@ export default useUpdateItem as UseUpdateItem export const handler = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'PUT', }, async fetcher({ @@ -46,39 +48,39 @@ export const handler = { body: { itemId, item }, }) }, - useHook: ({ fetch }: MutationHookContext) => < - T extends LineItem | undefined = undefined - >( - ctx: { - item?: T - wait?: number - } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() as any + useHook: + ({ fetch }: MutationHookContext) => + ( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any - return useCallback( - debounce(async (input: UpdateItemActionInput) => { - const itemId = input.id ?? item?.id - const productId = input.productId ?? item?.productId - const variantId = input.productId ?? item?.variantId + return useCallback( + debounce(async (input: UpdateItemActionInput) => { + const itemId = input.id ?? item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId - if (!itemId || !productId || !variantId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ + input: { + itemId, + item: { productId, variantId, quantity: input.quantity }, + }, }) - } - - const data = await fetch({ - input: { - itemId, - item: { productId, variantId, quantity: input.quantity }, - }, - }) - await mutate(data, false) - return data - }, ctx.wait ?? 500), - [fetch, mutate] - ) - }, + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, } diff --git a/packages/kibocommerce/src/customer/use-customer.tsx b/packages/kibocommerce/src/customer/use-customer.tsx index 73e804a4b..1bd9c5107 100644 --- a/packages/kibocommerce/src/customer/use-customer.tsx +++ b/packages/kibocommerce/src/customer/use-customer.tsx @@ -1,24 +1,28 @@ import { SWRHook } from '@vercel/commerce/utils/types' -import useCustomer, { UseCustomer } from '@vercel/commerce/customer/use-customer' -import type { CustomerHook } from '../types/customer' +import useCustomer, { + type UseCustomer, +} from '@vercel/commerce/customer/use-customer' +import type { CustomerHook } from '@vercel/commerce/types/customer' export default useCustomer as UseCustomer export const handler: SWRHook = { fetchOptions: { - url: '/api/customer', + url: '/api/commerce/customer', method: 'GET', }, async fetcher({ options, fetch }) { const data = await fetch(options) return data?.customer ?? null }, - useHook: ({ useData }) => (input) => { - return useData({ - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, } diff --git a/packages/kibocommerce/src/lib/normalize.ts b/packages/kibocommerce/src/lib/normalize.ts index 363589f0f..1c2e1dc46 100644 --- a/packages/kibocommerce/src/lib/normalize.ts +++ b/packages/kibocommerce/src/lib/normalize.ts @@ -1,50 +1,59 @@ -import type { PrCategory, CustomerAccountInput, Document } from '../../schema' -import { Page } from '../types/page'; -import { Customer } from '../types/customer' +import type { + PrCategory, + CustomerAccountInput, + Document, + Product as KiboProduct, +} from '../../schema' -export function normalizeProduct(productNode: any, config: any): any { +import type { Page } from '@vercel/commerce/types/page' +import type { Category } from '@vercel/commerce/types/site' +import type { Product } from '@vercel/commerce/types/product' +import type { Customer } from '@vercel/commerce/types/customer' +import type { Cart, LineItem } from '@vercel/commerce/types/cart' +import type { WishlistItem } from '@vercel/commerce/types/wishlist' + +export function normalizeProduct( + productNode: KiboProduct, + config: any +): Product { const product = { - id: productNode.productCode, - name: productNode.content.productName, + id: productNode.productCode || '', + name: productNode.content?.productName || '', vendor: '', path: `/${productNode.productCode}`, - slug: productNode.productCode, + slug: productNode.productCode || '', price: { - value: productNode?.price?.price, + value: productNode?.price?.price ?? 0, currencyCode: config.currencyCode, }, - descriptionHtml: productNode.content.productShortDescription, - - images: productNode.content.productImages.map((p: any) => ({ - url: `http:${p.imageUrl}`, - altText: p.imageLabel, - })), - - variants: productNode.variations?.map((v: any) => ({ - id: v.productCode, - options: v.options.map((o: any) => ({ - ['__typename']: 'MultipleChoiceOption', - id: o.attributeFQN, - displayName: - o.attributeFQN.split('~')[1][0].toUpperCase() + - o.attributeFQN.split('~')[1].slice(1).toLowerCase(), - values: [{ label: o.value.toString() }], - })), - })) || [ - { - id: '', - }, - ], - + description: productNode.content?.productFullDescription || '', + descriptionHtml: productNode.content?.productFullDescription || '', + images: + productNode.content?.productImages?.map((p: any) => ({ + url: `http:${p.imageUrl}`, + altText: p.imageLabel, + })) || [], + variants: + productNode.variations?.map((v: any) => ({ + id: v.productCode, + options: + v.options?.map((o: any) => ({ + ['__typename']: 'MultipleChoiceOption', + id: o.attributeFQN, + displayName: + o.attributeFQN.split('~')[1][0].toUpperCase() + + o.attributeFQN.split('~')[1].slice(1).toLowerCase(), + values: [{ label: o.value.toString() }], + })) ?? [], + })) ?? [], options: productNode.options?.map((o: any) => ({ id: o.attributeFQN, displayName: o.attributeDetail.name, values: o.values.map((v: any) => ({ label: v.value.toString(), - hexColors: '', })), - })) || [], + })) ?? [], } return product @@ -57,11 +66,11 @@ export function normalizePage(page: Document): Page { url: page.properties.url, body: page.properties.body, is_visible: page.properties.is_visible, - sort_order: page.properties.sort_order + sort_order: page.properties.sort_order, } } -export function normalizeCart(data: any): any { +export function normalizeCart(data: any): Cart { return { id: data.id, customerId: data.userId, @@ -86,16 +95,15 @@ export function normalizeCart(data: any): any { export function normalizeCustomer(customer: CustomerAccountInput): Customer { return { - id: customer.id, - firstName: customer.firstName, - lastName: customer.lastName, - email: customer.emailAddress, - userName: customer.userName, - isAnonymous: customer.isAnonymous + id: String(customer.id), + firstName: customer.firstName || '', + lastName: customer.lastName || '', + email: customer.emailAddress || '', + acceptsMarketing: !!customer.acceptsMarketing, } } -function normalizeLineItem(item: any): any { +function normalizeLineItem(item: any): LineItem { return { id: item.id, variantId: item.product.variationProductCode, @@ -113,7 +121,7 @@ function normalizeLineItem(item: any): any { price: item?.unitPrice.extendedAmount, listPrice: 0, }, - options: item.product.options, + options: item.product.options ?? [], path: `${item.product.productCode}`, discounts: item?.discounts?.map((discount: any) => ({ value: discount.discounted_amount, @@ -121,11 +129,11 @@ function normalizeLineItem(item: any): any { } } -export function normalizeCategory(category: PrCategory): any { +export function normalizeCategory(category: PrCategory): Category { return { - id: category?.categoryCode, - name: category?.content?.name, - slug: category?.content?.slug, + id: category?.categoryCode || '', + name: category?.content?.name || '', + slug: category?.content?.slug || '', path: `/${category?.content?.slug}`, } } @@ -133,11 +141,13 @@ export function normalizeCategory(category: PrCategory): any { export function normalizeWishlistItem( item: any, config: any, - includeProducts=false -): any { + includeProducts = false +): WishlistItem { if (includeProducts) { return { id: item.id, + productId: String(item.product.productCode), + variantId: item.product.variationProductCode, product: getProuducts(item, config), } } else { @@ -173,7 +183,7 @@ function getProuducts(item: any, config: any): any { }, }, ], - options: item.product.options, + options: item.product.options ?? [], path: `/${item.product.productCode}`, description: item.product.description, } diff --git a/packages/kibocommerce/src/lib/set-cookie.ts b/packages/kibocommerce/src/lib/set-cookie.ts index 2c194c921..a76558c20 100644 --- a/packages/kibocommerce/src/lib/set-cookie.ts +++ b/packages/kibocommerce/src/lib/set-cookie.ts @@ -1,3 +1,3 @@ export function setCookies(res: any, cookies: string[]): void { - res.setHeader('Set-Cookie', cookies); -} \ No newline at end of file + res.setHeader('Set-Cookie', cookies) +} diff --git a/packages/kibocommerce/src/product/use-search.tsx b/packages/kibocommerce/src/product/use-search.tsx index 4a9107b4a..ba1ebcf72 100644 --- a/packages/kibocommerce/src/product/use-search.tsx +++ b/packages/kibocommerce/src/product/use-search.tsx @@ -5,7 +5,7 @@ export default useSearch as UseSearch export const handler: SWRHook = { fetchOptions: { method: 'GET', - url: '/api/catalog/products', + url: '/api/commerce/catalog/products', }, fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { // Use a dummy base as we only care about the relative path @@ -23,15 +23,17 @@ export const handler: SWRHook = { method: options.method, }) }, - useHook: ({ useData }) => (input) => { - return useData({ - input: [ - ['search', input.search], - ['categoryId', input.categoryId], - ['brandId', input.brandId], - ['sort', input.sort], - ], - swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + }, } diff --git a/packages/kibocommerce/src/types/customer.ts b/packages/kibocommerce/src/types/customer.ts deleted file mode 100644 index 29f68fef1..000000000 --- a/packages/kibocommerce/src/types/customer.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as Core from '@vercel/commerce/types/customer' -export type Maybe = T | null -export * from '@vercel/commerce/types/customer' -export type Scalars = { - ID: string - String: string - Boolean: boolean - Int: number - Float: number - /** The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. */ - AnyScalar: any - /** DateTime custom scalar type */ - DateTime: any - /** Object custom scalar type */ - Object: any -} - -export type Customer = { - id: Scalars['Int'], - firstName?: Maybe, - lastName?: Maybe, - email?: Maybe, - userName?: Maybe, - isAnonymous?: Maybe -} - -export type CustomerSchema = Core.CustomerSchema diff --git a/packages/kibocommerce/src/types/login.ts b/packages/kibocommerce/src/types/login.ts deleted file mode 100644 index 2e7b198b2..000000000 --- a/packages/kibocommerce/src/types/login.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Core from '@vercel/commerce/types/login' -import type { CustomerUserAuthInfoInput } from '../../schema' - -export * from '@vercel/commerce/types/login' - -export type LoginOperation = Core.LoginOperation & { - variables: CustomerUserAuthInfoInput -} diff --git a/packages/kibocommerce/src/types/logout.ts b/packages/kibocommerce/src/types/logout.ts deleted file mode 100644 index 1de06f8dc..000000000 --- a/packages/kibocommerce/src/types/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/logout' diff --git a/packages/kibocommerce/src/types/page.ts b/packages/kibocommerce/src/types/page.ts deleted file mode 100644 index f311eb8b8..000000000 --- a/packages/kibocommerce/src/types/page.ts +++ /dev/null @@ -1,35 +0,0 @@ -import * as Core from '@vercel/commerce/types/page' -export type Maybe = T | null -export type Scalars = { - ID: string - String: string - Boolean: boolean - Int: number - Float: number - /** The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. */ - AnyScalar: any - /** DateTime custom scalar type */ - DateTime: any - /** Object custom scalar type */ - Object: any -} - -export * from '@vercel/commerce/types/page' - -export type Page = Core.Page - -export type PageTypes = { - page: Page -} - -export type GetPagesQueryParams = { - documentListName: Maybe -} - -export type GetPageQueryParams = { - id: Maybe - documentListName: Maybe -} - -export type GetAllPagesOperation = Core.GetAllPagesOperation -export type GetPageOperation = Core.GetPageOperation diff --git a/packages/kibocommerce/src/types/signup.ts b/packages/kibocommerce/src/types/signup.ts deleted file mode 100644 index 3f0d1af5a..000000000 --- a/packages/kibocommerce/src/types/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/signup' diff --git a/packages/kibocommerce/src/wishlist/use-add-item.tsx b/packages/kibocommerce/src/wishlist/use-add-item.tsx index 3f634e31e..6955778e5 100644 --- a/packages/kibocommerce/src/wishlist/use-add-item.tsx +++ b/packages/kibocommerce/src/wishlist/use-add-item.tsx @@ -10,7 +10,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'POST', }, useHook: diff --git a/packages/kibocommerce/src/wishlist/use-remove-item.tsx b/packages/kibocommerce/src/wishlist/use-remove-item.tsx index 490154a45..e61328769 100644 --- a/packages/kibocommerce/src/wishlist/use-remove-item.tsx +++ b/packages/kibocommerce/src/wishlist/use-remove-item.tsx @@ -12,7 +12,7 @@ export default useRemoveItem as UseRemoveItem export const handler: MutationHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'DELETE', }, useHook: diff --git a/packages/kibocommerce/src/wishlist/use-wishlist.tsx b/packages/kibocommerce/src/wishlist/use-wishlist.tsx index a91eb419b..83d3fadfc 100644 --- a/packages/kibocommerce/src/wishlist/use-wishlist.tsx +++ b/packages/kibocommerce/src/wishlist/use-wishlist.tsx @@ -1,6 +1,8 @@ import { useMemo } from 'react' import { SWRHook } from '@vercel/commerce/utils/types' -import useWishlist, { UseWishlist } from '@vercel/commerce/wishlist/use-wishlist' +import useWishlist, { + UseWishlist, +} from '@vercel/commerce/wishlist/use-wishlist' import type { GetWishlistHook } from '@vercel/commerce/types/wishlist' import useCustomer from '../customer/use-customer' @@ -8,45 +10,47 @@ export default useWishlist as UseWishlist export const handler: SWRHook = { fetchOptions: { - url: '/api/wishlist', + url: '/api/commerce/wishlist', method: 'GET', }, - fetcher({ input: { customerId, includeProducts}, options, fetch }) { + fetcher({ input: { customerId, includeProducts }, options, fetch }) { if (!customerId) return null // Use a dummy base as we only care about the relative path const url = new URL(options.url!, 'http://a') if (includeProducts) url.searchParams.set('products', '1') - if(customerId) url.searchParams.set('customerId', customerId) + if (customerId) url.searchParams.set('customerId', customerId) return fetch({ url: url.pathname + url.search, method: options.method, }) }, - useHook: ({ useData }) => (input) => { - const { data: customer } = useCustomer() - const response = useData({ - input: [ - ['customerId', customer?.id], - ['includeProducts', input?.includeProducts], - ], - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.items?.length || 0) <= 0 + useHook: + ({ useData }) => + (input) => { + const { data: customer } = useCustomer() + const response = useData({ + input: [ + ['customerId', customer?.id], + ['includeProducts', input?.includeProducts], + ], + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.items?.length || 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/packages/local/package.json b/packages/local/package.json index 3ec3e69a4..f8932afe4 100644 --- a/packages/local/package.json +++ b/packages/local/package.json @@ -47,28 +47,28 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1" + "@vercel/commerce": "workspace:*" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/react": "^18.0.14", + "@types/node-fetch": "2.6.2", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/local/src/api/endpoints.ts b/packages/local/src/api/endpoints.ts new file mode 100644 index 000000000..b921d5e4a --- /dev/null +++ b/packages/local/src/api/endpoints.ts @@ -0,0 +1,8 @@ +import createEndpoints from '@vercel/commerce/api/endpoints' +import type { LocalAPI } from '.' + +const endpoints = {} + +export default function localAPI(commerce: LocalAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/local/src/api/endpoints/cart/index.ts b/packages/local/src/api/endpoints/cart/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/catalog/index.ts b/packages/local/src/api/endpoints/catalog/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/catalog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/catalog/products.ts b/packages/local/src/api/endpoints/catalog/products.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/checkout/index.ts b/packages/local/src/api/endpoints/checkout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/checkout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/customer/address.ts b/packages/local/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/customer/card.ts b/packages/local/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/customer/index.ts b/packages/local/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/login/index.ts b/packages/local/src/api/endpoints/login/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/logout/index.ts b/packages/local/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/signup/index.ts b/packages/local/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/endpoints/wishlist/index.tsx b/packages/local/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/local/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/local/src/api/operations/get-product.ts b/packages/local/src/api/operations/get-product.ts index b77be3acb..b6ee0c3c8 100644 --- a/packages/local/src/api/operations/get-product.ts +++ b/packages/local/src/api/operations/get-product.ts @@ -4,9 +4,7 @@ import { GetProductOperation } from '@vercel/commerce/types/product' import data from '../../data.json' import type { OperationContext } from '@vercel/commerce/api/operations' -export default function getProductOperation({ - commerce, -}: OperationContext) { +export default function getProductOperation(_p: OperationContext) { async function getProduct({ query = '', variables, diff --git a/packages/local/src/api/operations/get-site-info.ts b/packages/local/src/api/operations/get-site-info.ts index c07a479cb..8425ee5c5 100644 --- a/packages/local/src/api/operations/get-site-info.ts +++ b/packages/local/src/api/operations/get-site-info.ts @@ -1,5 +1,5 @@ import { OperationContext } from '@vercel/commerce/api/operations' -import { Category } from '@vercel/commerce/types/site' +import { Category, GetSiteInfoOperation } from '@vercel/commerce/types/site' import { LocalConfig } from '../index' export type GetSiteInfoResult< diff --git a/packages/local/src/api/utils/fetch-local.ts b/packages/local/src/api/utils/fetch-local.ts index ae84fff8b..624f1d288 100644 --- a/packages/local/src/api/utils/fetch-local.ts +++ b/packages/local/src/api/utils/fetch-local.ts @@ -1,17 +1,15 @@ import { FetcherError } from '@vercel/commerce/utils/errors' import type { GraphQLFetcher } from '@vercel/commerce/api' import type { LocalConfig } from '../index' -import fetch from './fetch' const fetchGraphqlApi: (getConfig: () => LocalConfig) => GraphQLFetcher = (getConfig) => - async (query: string, { variables, preview } = {}, fetchOptions) => { + async (query: string, { variables, preview } = {}, headers?: HeadersInit) => { const config = getConfig() const res = await fetch(config.commerceUrl, { - ...fetchOptions, method: 'POST', headers: { - ...fetchOptions?.headers, + ...headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ diff --git a/packages/local/src/data.json b/packages/local/src/data.json index 18c8ee718..5cde8d184 100644 --- a/packages/local/src/data.json +++ b/packages/local/src/data.json @@ -7,7 +7,8 @@ "path": "/new-short-sleeve-t-shirt", "slug": "new-short-sleeve-t-shirt", "price": { "value": 25, "currencyCode": "USD" }, - "descriptionHtml": "

Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last – only 200 of these shirts will be made! All proceeds will be donated to charity.

", + "description": "Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last - only 200 of these shirts will be made! All proceeds will be donated to charity.", + "descriptionHtml": "

Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last - only 200 of these shirts will be made! All proceeds will be donated to charity.

", "images": [ { "url": "/assets/drop-shirt-0.png", @@ -31,6 +32,8 @@ "variants": [ { "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzU0NDczMjUwMjQ0MjAss=", + "name": "New Short Sleeve T-Shirt", + "sku": "new-short-sleeve-t-shirt", "options": [ { "__typename": "MultipleChoiceOption", @@ -80,6 +83,7 @@ "path": "/lightweight-jacket", "slug": "lightweight-jacket", "price": { "value": 249.99, "currencyCode": "USD" }, + "description": "Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last - only 200 of these shirts will be made! All proceeds will be donated to charity.", "descriptionHtml": "

Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last – only 200 of these shirts will be made! All proceeds will be donated to charity.

", "images": [ { @@ -104,6 +108,8 @@ "variants": [ { "id": "Z2lkOid8vc2hvcGlmeS9Qcm9kdWN0LzU0NDczMjUwMjQ0MjAss=", + "name": "Lightweight Jacket", + "sku": "lightweight-jacket", "options": [ { "__typename": "MultipleChoiceOption", @@ -153,6 +159,7 @@ "path": "/shirt", "slug": "shirt", "price": { "value": 25, "currencyCode": "USD" }, + "description": "Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last - only 200 of these shirts will be made! All proceeds will be donated to charity.", "descriptionHtml": "

Show off your love for Next.js and Vercel with this unique, limited edition t-shirt. This design is part of a limited run, numbered drop at the June 2021 Next.js Conf. It features a unique, handcrafted triangle design. Get it while supplies last – only 200 of these shirts will be made! All proceeds will be donated to charity.

", "images": [ { @@ -189,6 +196,8 @@ "variants": [ { "id": "Z2lkOi8vc2hvcGlmeS9Qcms9kdWN0LzU0NDczMjUwMjQ0MjAss=", + "name": "Shirt", + "sku": "shirt", "options": [ { "__typename": "MultipleChoiceOption", diff --git a/packages/local/src/wishlist/use-wishlist.tsx b/packages/local/src/wishlist/use-wishlist.tsx index b2785d46f..8751aa4ed 100644 --- a/packages/local/src/wishlist/use-wishlist.tsx +++ b/packages/local/src/wishlist/use-wishlist.tsx @@ -1,19 +1,8 @@ import { HookFetcher } from '@vercel/commerce/utils/types' -import type { Product } from '@vercel/commerce/types/product' +import { Wishlist } from '@vercel/commerce/types/wishlist' const defaultOpts = {} -export type Wishlist = { - items: [ - { - product_id: number - variant_id: number - id: number - product: Product - } - ] -} - export interface UseWishlistOptions { includeProducts?: boolean } diff --git a/packages/ordercloud/package.json b/packages/ordercloud/package.json index 43eeac9ad..80c6375da 100644 --- a/packages/ordercloud/package.json +++ b/packages/ordercloud/package.json @@ -47,15 +47,14 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", - "stripe": "^8.197.0", - "lodash.debounce": "^4.0.8" + "@vercel/commerce": "workspace:*", + "lodash.debounce": "^4.0.8", + "cookie": "^0.4.1" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", @@ -63,15 +62,17 @@ "@taskr/watch": "^1.1.0", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/react": "^18.0.14", + "@types/cookie": "^0.4.1", + "@types/node-fetch": "^2.6.2", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/ordercloud/src/api/endpoints/cart/add-item.ts b/packages/ordercloud/src/api/endpoints/cart/add-item.ts index 28d372bd0..11f7b430a 100644 --- a/packages/ordercloud/src/api/endpoints/cart/add-item.ts +++ b/packages/ordercloud/src/api/endpoints/cart/add-item.ts @@ -1,72 +1,65 @@ import type { CartEndpoint } from '.' -import type { RawVariant } from '../../../types/product' -import type { OrdercloudLineItem } from '../../../types/cart' - -import { serialize } from 'cookie' +import type { RawVariantSpec } from '../../../types/product' import { formatCart } from '../../utils/cart' +import { serialize } from 'cookie' const addItem: CartEndpoint['handlers']['addItem'] = async ({ - res, + req, body: { cartId, item }, config: { restBuyerFetch, cartCookie, tokenCookie }, }) => { - // Return an error if no item is present - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - - // Store token - let token - - // Set the quantity if not present - if (!item.quantity) item.quantity = 1 + // Get token + let token = req.cookies.get(tokenCookie)?.value + let headers: any = {} // Create an order if it doesn't exist if (!cartId) { const { ID, meta } = await restBuyerFetch( 'POST', `/orders/Outgoing`, - {} - ).then((response: { ID: string; meta: { token: string } }) => response) + {}, + { token } + ) - // Set the cart id and token cartId = ID - token = meta.token - // Set the cart and token cookie - res.setHeader('Set-Cookie', [ - serialize(tokenCookie, meta.token, { - maxAge: 60 * 60 * 24 * 30, - expires: new Date(Date.now() + 60 * 60 * 24 * 30 * 1000), - secure: process.env.NODE_ENV === 'production', - path: '/', - sameSite: 'lax', - }), - serialize(cartCookie, cartId, { - maxAge: 60 * 60 * 24 * 30, - expires: new Date(Date.now() + 60 * 60 * 24 * 30 * 1000), - secure: process.env.NODE_ENV === 'production', - path: '/', - sameSite: 'lax', - }), - ]) + headers = { + 'set-cookie': [ + serialize(cartCookie, cartId!, { + maxAge: 60 * 60 * 24 * 30, + expires: new Date(Date.now() + 60 * 60 * 24 * 30 * 1000), + secure: process.env.NODE_ENV === 'production', + path: '/', + sameSite: 'lax', + }), + ], + } + + if (meta?.token) { + headers['set-cookie'].push( + serialize(tokenCookie, meta.token?.access_token, { + maxAge: meta.token.expires_in, + expires: new Date(Date.now() + meta.token.expires_in * 1000), + secure: process.env.NODE_ENV === 'production', + path: '/', + sameSite: 'lax', + }) + ) + } } - // Store specs - let specs: RawVariant['Specs'] = [] + let specs: RawVariantSpec[] = [] // If a variant is present, fetch its specs - if (item.variantId) { - specs = await restBuyerFetch( + if (item.variantId !== 'undefined') { + const { Specs } = await restBuyerFetch( 'GET', `/me/products/${item.productId}/variants/${item.variantId}`, null, { token } - ).then((res: RawVariant) => res.Specs) + ) + specs = Specs } // Add the item to the order @@ -81,19 +74,19 @@ const addItem: CartEndpoint['handlers']['addItem'] = async ({ { token } ) - // Get cart - const [cart, lineItems] = await Promise.all([ + // Get cart & line items + const [cart, { Items }] = await Promise.all([ restBuyerFetch('GET', `/orders/Outgoing/${cartId}`, null, { token }), restBuyerFetch('GET', `/orders/Outgoing/${cartId}/lineitems`, null, { token, - }).then((response: { Items: OrdercloudLineItem[] }) => response.Items), + }), ]) // Format cart - const formattedCart = formatCart(cart, lineItems) + const formattedCart = formatCart(cart, Items) - // Return cart and errors - res.status(200).json({ data: formattedCart, errors: [] }) + // Return cart and headers + return { data: formattedCart, headers } } export default addItem diff --git a/packages/ordercloud/src/api/endpoints/cart/get-cart.ts b/packages/ordercloud/src/api/endpoints/cart/get-cart.ts index 7ea077b54..8e3cf43a2 100644 --- a/packages/ordercloud/src/api/endpoints/cart/get-cart.ts +++ b/packages/ordercloud/src/api/endpoints/cart/get-cart.ts @@ -1,64 +1,56 @@ -import type { OrdercloudLineItem } from '../../../types/cart' import type { CartEndpoint } from '.' import { serialize } from 'cookie' - import { formatCart } from '../../utils/cart' // Return current cart info const getCart: CartEndpoint['handlers']['getCart'] = async ({ req, - res, body: { cartId }, config: { restBuyerFetch, cartCookie, tokenCookie }, }) => { + // If no cartId is provided, return data null if (!cartId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) + return { data: null } } try { - // Get token from cookies - const token = req.cookies[tokenCookie] + // Get token + const token = req.cookies.get(tokenCookie)?.value - // Get cart - const cart = await restBuyerFetch( - 'GET', - `/orders/Outgoing/${cartId}`, - null, - { token } - ) - - // Get line items - const lineItems = await restBuyerFetch( - 'GET', - `/orders/Outgoing/${cartId}/lineitems`, - null, - { token } - ).then((response: { Items: OrdercloudLineItem[] }) => response.Items) - - // Format cart - const formattedCart = formatCart(cart, lineItems) - - // Return cart and errors - res.status(200).json({ data: formattedCart, errors: [] }) - } catch (error) { - // Reset cart and token cookie - res.setHeader('Set-Cookie', [ - serialize(cartCookie, cartId, { - maxAge: -1, - path: '/', - }), - serialize(tokenCookie, cartId, { - maxAge: -1, - path: '/', + // Get cart & line items + const [cart, { Items }] = await Promise.all([ + restBuyerFetch('GET', `/orders/Outgoing/${cartId}`, null, { token }), + restBuyerFetch('GET', `/orders/Outgoing/${cartId}/lineitems`, null, { + token, }), ]) + // Format cart + const formattedCart = formatCart(cart, Items) + // Return cart and errors + return { + data: formattedCart, + } + } catch (error) { + console.error(error) + const headers = { + 'set-cookie': [ + serialize(cartCookie, '', { + maxAge: -1, + path: '/', + }), + serialize(tokenCookie, '', { + maxAge: -1, + path: '/', + }), + ], + } // Return empty cart - res.status(200).json({ data: null, errors: [] }) + return { + data: null, + headers, + } } } diff --git a/packages/ordercloud/src/api/endpoints/cart/index.ts b/packages/ordercloud/src/api/endpoints/cart/index.ts index f36364c46..ad1c40495 100644 --- a/packages/ordercloud/src/api/endpoints/cart/index.ts +++ b/packages/ordercloud/src/api/endpoints/cart/index.ts @@ -1,5 +1,5 @@ -import type { CartSchema } from '../../../types/cart' import type { OrdercloudAPI } from '../..' +import type { CartSchema } from '@vercel/commerce/types/cart' import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import cartEndpoint from '@vercel/commerce/api/endpoints/cart' @@ -9,9 +9,8 @@ import addItem from './add-item' import updateItem from './update-item' import removeItem from './remove-item' -export type CartAPI = GetAPISchema - export type CartEndpoint = CartAPI['endpoint'] +export type CartAPI = GetAPISchema export const handlers: CartEndpoint['handlers'] = { getCart, diff --git a/packages/ordercloud/src/api/endpoints/cart/remove-item.ts b/packages/ordercloud/src/api/endpoints/cart/remove-item.ts index ea9c46e4c..0a62d895e 100644 --- a/packages/ordercloud/src/api/endpoints/cart/remove-item.ts +++ b/packages/ordercloud/src/api/endpoints/cart/remove-item.ts @@ -1,30 +1,22 @@ import type { CartEndpoint } from '.' - import { formatCart } from '../../utils/cart' import { OrdercloudLineItem } from '../../../types/cart' const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ req, - res, body: { cartId, itemId }, config: { restBuyerFetch, tokenCookie }, }) => { - if (!cartId || !itemId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - - // Get token from cookies - const token = req.cookies[tokenCookie] + const token = req.cookies.get(tokenCookie)?.value // Remove the item to the order await restBuyerFetch( 'DELETE', `/orders/Outgoing/${cartId}/lineitems/${itemId}`, null, - { token } + { + token, + } ) // Get cart @@ -39,7 +31,7 @@ const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ const formattedCart = formatCart(cart, lineItems) // Return cart and errors - res.status(200).json({ data: formattedCart, errors: [] }) + return { data: formattedCart } } export default removeItem diff --git a/packages/ordercloud/src/api/endpoints/cart/update-item.ts b/packages/ordercloud/src/api/endpoints/cart/update-item.ts index 20113baee..9a0caca85 100644 --- a/packages/ordercloud/src/api/endpoints/cart/update-item.ts +++ b/packages/ordercloud/src/api/endpoints/cart/update-item.ts @@ -6,19 +6,10 @@ import { formatCart } from '../../utils/cart' const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ req, - res, body: { cartId, itemId, item }, config: { restBuyerFetch, tokenCookie }, }) => { - if (!cartId || !itemId || !item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Invalid request' }], - }) - } - - // Get token from cookies - const token = req.cookies[tokenCookie] + const token = req.cookies.get(tokenCookie)?.value // Store specs let specs: RawVariant['Specs'] = [] @@ -27,9 +18,7 @@ const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ if (item.variantId) { specs = await restBuyerFetch( 'GET', - `/me/products/${item.productId}/variants/${item.variantId}`, - null, - { token } + `/me/products/${item.productId}/variants/${item.variantId}` ).then((res: RawVariant) => res.Specs) } @@ -42,7 +31,9 @@ const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ Quantity: item.quantity, Specs: specs, }, - { token } + { + token, + } ) // Get cart @@ -57,7 +48,7 @@ const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ const formattedCart = formatCart(cart, lineItems) // Return cart and errors - res.status(200).json({ data: formattedCart, errors: [] }) + return { data: formattedCart } } export default updateItem diff --git a/packages/ordercloud/src/api/endpoints/catalog/products/get-products.ts b/packages/ordercloud/src/api/endpoints/catalog/products/get-products.ts index ad8d391ac..414627f60 100644 --- a/packages/ordercloud/src/api/endpoints/catalog/products/get-products.ts +++ b/packages/ordercloud/src/api/endpoints/catalog/products/get-products.ts @@ -1,13 +1,14 @@ -import { normalize as normalizeProduct } from '../../../../utils/product' import { ProductsEndpoint } from '.' +import { normalize as normalizeProduct } from '../../../../utils/product' // Get products for the product list page. Search and category filter implemented. Sort and brand filter not implemented. const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ req, - res, - body: { search, categoryId, brandId, sort }, - config: { restBuyerFetch, cartCookie, tokenCookie }, + body: { search, categoryId }, + config: { restBuyerFetch, tokenCookie }, }) => { + const token = req.cookies.get(tokenCookie)?.value + //Use a dummy base as we only care about the relative path const url = new URL('/me/products', 'http://a') @@ -18,20 +19,19 @@ const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ url.searchParams.set('categoryID', String(categoryId)) } - // Get token from cookies - const token = req.cookies[tokenCookie] - var rawProducts = await restBuyerFetch( 'GET', url.pathname + url.search, null, { token } - ) + ).then((response: { Items: any[] }) => response.Items) - const products = rawProducts.Items.map(normalizeProduct) - const found = rawProducts?.Items?.length > 0 - - res.status(200).json({ data: { products, found } }) + return { + data: { + products: rawProducts.map(normalizeProduct), + found: rawProducts?.length > 0, + }, + } } export default getProducts diff --git a/packages/ordercloud/src/api/endpoints/checkout/get-checkout.ts b/packages/ordercloud/src/api/endpoints/checkout/get-checkout.ts index c0ab1a40d..d3083c4bb 100644 --- a/packages/ordercloud/src/api/endpoints/checkout/get-checkout.ts +++ b/packages/ordercloud/src/api/endpoints/checkout/get-checkout.ts @@ -2,27 +2,15 @@ import type { CheckoutEndpoint } from '.' const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, - res, body: { cartId }, - config: { restBuyerFetch, tokenCookie }, + config: { restBuyerFetch }, }) => { - // Return an error if no item is present - if (!cartId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing cookie' }], - }) - } - - // Get token from cookies - const token = req.cookies[tokenCookie] + const token = req.cookies.get('token')?.value // Register credit card const payments = await restBuyerFetch( 'GET', - `/orders/Outgoing/${cartId}/payments`, - null, - { token } + `/orders/Outgoing/${cartId}/payments` ).then((response: { Items: unknown[] }) => response.Items) const address = await restBuyerFetch( @@ -35,13 +23,15 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ ) // Return cart and errors - res.status(200).json({ + + return { data: { hasPayment: payments.length > 0, hasShipping: Boolean(address), + addressId: address, + cardId: payments[0]?.ID, }, - errors: [], - }) + } } export default getCheckout diff --git a/packages/ordercloud/src/api/endpoints/checkout/index.ts b/packages/ordercloud/src/api/endpoints/checkout/index.ts index 44a9a6933..49f10361a 100644 --- a/packages/ordercloud/src/api/endpoints/checkout/index.ts +++ b/packages/ordercloud/src/api/endpoints/checkout/index.ts @@ -1,4 +1,4 @@ -import type { CheckoutSchema } from '../../../types/checkout' +import type { CheckoutSchema } from '@vercel/commerce/types/checkout' import type { OrdercloudAPI } from '../..' import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' diff --git a/packages/ordercloud/src/api/endpoints/checkout/submit-checkout.ts b/packages/ordercloud/src/api/endpoints/checkout/submit-checkout.ts index 8cd9be5e4..af63b9418 100644 --- a/packages/ordercloud/src/api/endpoints/checkout/submit-checkout.ts +++ b/packages/ordercloud/src/api/endpoints/checkout/submit-checkout.ts @@ -2,31 +2,18 @@ import type { CheckoutEndpoint } from '.' const submitCheckout: CheckoutEndpoint['handlers']['submitCheckout'] = async ({ req, - res, body: { cartId }, config: { restBuyerFetch, tokenCookie }, }) => { - // Return an error if no item is present - if (!cartId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - - // Get token from cookies - const token = req.cookies[tokenCookie] + const token = req.cookies.get(tokenCookie)?.value // Submit order - await restBuyerFetch( - 'POST', - `/orders/Outgoing/${cartId}/submit`, - {}, - { token } - ) + await restBuyerFetch('POST', `/orders/Outgoing/${cartId}/submit`, null, { + token, + }) // Return cart and errors - res.status(200).json({ data: null, errors: [] }) + return { data: null } } export default submitCheckout diff --git a/packages/ordercloud/src/api/endpoints/customer/address/add-item.ts b/packages/ordercloud/src/api/endpoints/customer/address/add-item.ts index 434c2400d..d9e219ac0 100644 --- a/packages/ordercloud/src/api/endpoints/customer/address/add-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/address/add-item.ts @@ -1,25 +1,11 @@ import type { CustomerAddressEndpoint } from '.' const addItem: CustomerAddressEndpoint['handlers']['addItem'] = async ({ - res, + req, body: { item, cartId }, - config: { restBuyerFetch }, + config: { restBuyerFetch, tokenCookie }, }) => { - // Return an error if no item is present - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - - // Return an error if no item is present - if (!cartId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Cookie not found' }], - }) - } + const token = req.cookies.get(tokenCookie)?.value // Register address const address = await restBuyerFetch('POST', `/me/addresses`, { @@ -37,11 +23,16 @@ const addItem: CustomerAddressEndpoint['handlers']['addItem'] = async ({ }).then((response: { ID: string }) => response.ID) // Assign address to order - await restBuyerFetch('PATCH', `/orders/Outgoing/${cartId}`, { - ShippingAddressID: address, - }) + await restBuyerFetch( + 'PATCH', + `/orders/Outgoing/${cartId}`, + { + ShippingAddressID: address, + }, + { token } + ) - return res.status(200).json({ data: null, errors: [] }) + return { data: null } } export default addItem diff --git a/packages/ordercloud/src/api/endpoints/customer/address/get-addresses.ts b/packages/ordercloud/src/api/endpoints/customer/address/get-addresses.ts index 2e27591c0..27c8e7d7b 100644 --- a/packages/ordercloud/src/api/endpoints/customer/address/get-addresses.ts +++ b/packages/ordercloud/src/api/endpoints/customer/address/get-addresses.ts @@ -1,9 +1,8 @@ import type { CustomerAddressEndpoint } from '.' -const getCards: CustomerAddressEndpoint['handlers']['getAddresses'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) -} +const getAddresses: CustomerAddressEndpoint['handlers']['getAddresses'] = + () => { + return Promise.resolve({ data: null }) + } -export default getCards +export default getAddresses diff --git a/packages/ordercloud/src/api/endpoints/customer/address/index.ts b/packages/ordercloud/src/api/endpoints/customer/address/index.ts index f6ab7e306..34e80c8dd 100644 --- a/packages/ordercloud/src/api/endpoints/customer/address/index.ts +++ b/packages/ordercloud/src/api/endpoints/customer/address/index.ts @@ -1,4 +1,4 @@ -import type { CustomerAddressSchema } from '../../../../types/customer/address' +import type { CustomerAddressSchema } from '@vercel/commerce/types/customer/address' import type { OrdercloudAPI } from '../../..' import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' diff --git a/packages/ordercloud/src/api/endpoints/customer/address/remove-item.ts b/packages/ordercloud/src/api/endpoints/customer/address/remove-item.ts index fba4e1154..14e05ff41 100644 --- a/packages/ordercloud/src/api/endpoints/customer/address/remove-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/address/remove-item.ts @@ -1,9 +1,7 @@ import type { CustomerAddressEndpoint } from '.' -const removeItem: CustomerAddressEndpoint['handlers']['removeItem'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) +const removeItem: CustomerAddressEndpoint['handlers']['removeItem'] = () => { + return Promise.resolve({ data: null }) } export default removeItem diff --git a/packages/ordercloud/src/api/endpoints/customer/address/update-item.ts b/packages/ordercloud/src/api/endpoints/customer/address/update-item.ts index 4c4b4b9ae..74e2c3bec 100644 --- a/packages/ordercloud/src/api/endpoints/customer/address/update-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/address/update-item.ts @@ -1,9 +1,7 @@ import type { CustomerAddressEndpoint } from '.' -const updateItem: CustomerAddressEndpoint['handlers']['updateItem'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) +const updateItem: CustomerAddressEndpoint['handlers']['updateItem'] = () => { + return Promise.resolve({ data: null }) } export default updateItem diff --git a/packages/ordercloud/src/api/endpoints/customer/card/add-item.ts b/packages/ordercloud/src/api/endpoints/customer/card/add-item.ts index ad7dead7c..c949bf1f3 100644 --- a/packages/ordercloud/src/api/endpoints/customer/card/add-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/card/add-item.ts @@ -1,53 +1,47 @@ import type { CustomerCardEndpoint } from '.' import type { OredercloudCreditCard } from '../../../../types/customer/card' -import Stripe from 'stripe' - -const stripe = new Stripe(process.env.STRIPE_SECRET as string, { - apiVersion: '2020-08-27', -}) - const addItem: CustomerCardEndpoint['handlers']['addItem'] = async ({ - res, + req, body: { item, cartId }, - config: { restBuyerFetch, restMiddlewareFetch }, + config: { restBuyerFetch, tokenCookie }, }) => { - // Return an error if no item is present - if (!item) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Missing item' }], - }) - } - - // Return an error if no item is present - if (!cartId) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Cookie not found' }], - }) - } - // Get token - const token = await stripe.tokens - .create({ + const token = req.cookies.get(tokenCookie)?.value + + const [exp_month, exp_year] = item.cardExpireDate.split('/') + const stripeToken = await fetch('https://api.stripe.com/v1/tokens', { + method: 'POST', + headers: { + Authorization: `Bearer ${process.env.STRIPE_SECRET}`, + }, + body: JSON.stringify({ card: { number: item.cardNumber, - exp_month: item.cardExpireDate.split('/')[0], - exp_year: item.cardExpireDate.split('/')[1], + exp_month, + exp_year, cvc: item.cardCvc, }, - }) - .then((res: { id: string }) => res.id) + }), + }) + .then((res) => res.json()) + .then((res) => res.id) // Register credit card - const creditCard = await restBuyerFetch('POST', `/me/creditcards`, { - Token: token, - CardType: 'credit', - PartialAccountNumber: item.cardNumber.slice(-4), - CardholderName: item.cardHolder, - ExpirationDate: item.cardExpireDate, - }).then((response: OredercloudCreditCard) => response.ID) + const creditCard = await restBuyerFetch( + 'POST', + `/me/creditcards`, + { + Token: stripeToken, + CardType: 'credit', + PartialAccountNumber: item.cardNumber.slice(-4), + CardholderName: item.cardHolder, + ExpirationDate: item.cardExpireDate, + }, + { + token, + } + ).then((response: OredercloudCreditCard) => response.ID) // Assign payment to order const payment = await restBuyerFetch( @@ -56,19 +50,18 @@ const addItem: CustomerCardEndpoint['handlers']['addItem'] = async ({ { Type: 'CreditCard', CreditCardID: creditCard, + }, + { + token, } ).then((response: { ID: string }) => response.ID) // Accept payment to order - await restMiddlewareFetch( - 'PATCH', - `/orders/All/${cartId}/payments/${payment}`, - { - Accepted: true, - } - ) + await restBuyerFetch('PATCH', `/orders/All/${cartId}/payments/${payment}`, { + Accepted: true, + }) - return res.status(200).json({ data: null, errors: [] }) + return { data: null } } export default addItem diff --git a/packages/ordercloud/src/api/endpoints/customer/card/get-cards.ts b/packages/ordercloud/src/api/endpoints/customer/card/get-cards.ts index e77520803..169dbfdc5 100644 --- a/packages/ordercloud/src/api/endpoints/customer/card/get-cards.ts +++ b/packages/ordercloud/src/api/endpoints/customer/card/get-cards.ts @@ -1,9 +1,7 @@ import type { CustomerCardEndpoint } from '.' -const getCards: CustomerCardEndpoint['handlers']['getCards'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) +const getCards: CustomerCardEndpoint['handlers']['getCards'] = () => { + return Promise.resolve({ data: null }) } export default getCards diff --git a/packages/ordercloud/src/api/endpoints/customer/card/index.ts b/packages/ordercloud/src/api/endpoints/customer/card/index.ts index 7116e3cb5..302009a89 100644 --- a/packages/ordercloud/src/api/endpoints/customer/card/index.ts +++ b/packages/ordercloud/src/api/endpoints/customer/card/index.ts @@ -1,4 +1,4 @@ -import type { CustomerCardSchema } from '../../../../types/customer/card' +import type { CustomerCardSchema } from '@vercel/commerce/types/customer/card' import type { OrdercloudAPI } from '../../..' import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' diff --git a/packages/ordercloud/src/api/endpoints/customer/card/remove-item.ts b/packages/ordercloud/src/api/endpoints/customer/card/remove-item.ts index 1a81d1cf4..1d7038c71 100644 --- a/packages/ordercloud/src/api/endpoints/customer/card/remove-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/card/remove-item.ts @@ -1,9 +1,7 @@ import type { CustomerCardEndpoint } from '.' -const removeItem: CustomerCardEndpoint['handlers']['removeItem'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) +const removeItem: CustomerCardEndpoint['handlers']['removeItem'] = () => { + return Promise.resolve({ data: null }) } export default removeItem diff --git a/packages/ordercloud/src/api/endpoints/customer/card/update-item.ts b/packages/ordercloud/src/api/endpoints/customer/card/update-item.ts index 9770644aa..dbf3f5ed0 100644 --- a/packages/ordercloud/src/api/endpoints/customer/card/update-item.ts +++ b/packages/ordercloud/src/api/endpoints/customer/card/update-item.ts @@ -1,9 +1,7 @@ import type { CustomerCardEndpoint } from '.' -const updateItem: CustomerCardEndpoint['handlers']['updateItem'] = async ({ - res, -}) => { - return res.status(200).json({ data: null, errors: [] }) +const updateItem: CustomerCardEndpoint['handlers']['updateItem'] = () => { + return Promise.resolve({ data: null }) } export default updateItem diff --git a/packages/ordercloud/src/api/endpoints/customer/index.ts b/packages/ordercloud/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/ordercloud/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/ordercloud/src/api/endpoints/index.ts b/packages/ordercloud/src/api/endpoints/index.ts new file mode 100644 index 000000000..5ea4659d0 --- /dev/null +++ b/packages/ordercloud/src/api/endpoints/index.ts @@ -0,0 +1,21 @@ +import type { OrdercloudAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' + +import cart from './cart' +import checkout from './checkout' +import products from './catalog/products' +import customerCard from './customer/card' +import customerAddress from './customer/address' + +const endpoints = { + cart, + checkout, + 'customer/card': customerCard, + 'customer/address': customerAddress, + 'catalog/products': products, +} + +export default function ordercloudAPI(commerce: OrdercloudAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/ordercloud/src/api/endpoints/login/index.ts b/packages/ordercloud/src/api/endpoints/login/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/ordercloud/src/api/endpoints/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/ordercloud/src/api/endpoints/logout/index.ts b/packages/ordercloud/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/ordercloud/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/ordercloud/src/api/endpoints/signup/index.ts b/packages/ordercloud/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/ordercloud/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/ordercloud/src/api/endpoints/wishlist/index.tsx b/packages/ordercloud/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/ordercloud/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/ordercloud/src/api/index.ts b/packages/ordercloud/src/api/index.ts index d1a809eca..01197d549 100644 --- a/packages/ordercloud/src/api/index.ts +++ b/packages/ordercloud/src/api/index.ts @@ -1,6 +1,6 @@ import type { CommerceAPI, CommerceAPIConfig } from '@vercel/commerce/api' import { getCommerceApi as commerceApi } from '@vercel/commerce/api' -import { createBuyerFetcher, createMiddlewareFetcher } from './utils/fetch-rest' +import { createBuyerFetcher } from './utils/fetch-rest' import createGraphqlFetcher from './utils/fetch-graphql' import getAllPages from './operations/get-all-pages' @@ -25,12 +25,6 @@ export interface OrdercloudConfig extends CommerceAPIConfig { body?: Record, fetchOptions?: Record ) => Promise - restMiddlewareFetch: ( - method: string, - resource: string, - body?: Record, - fetchOptions?: Record - ) => Promise apiVersion: string tokenCookie: string } @@ -44,9 +38,6 @@ const config: OrdercloudConfig = { tokenCookie: TOKEN_COOKIE, cartCookieMaxAge: 2592000, restBuyerFetch: createBuyerFetcher(() => getCommerceApi().getConfig()), - restMiddlewareFetch: createMiddlewareFetcher(() => - getCommerceApi().getConfig() - ), fetch: createGraphqlFetcher(() => getCommerceApi().getConfig()), } diff --git a/packages/ordercloud/src/api/utils/cart.ts b/packages/ordercloud/src/api/utils/cart.ts index 716f3521e..473387652 100644 --- a/packages/ordercloud/src/api/utils/cart.ts +++ b/packages/ordercloud/src/api/utils/cart.ts @@ -1,4 +1,5 @@ -import type { Cart, OrdercloudCart, OrdercloudLineItem } from '../../types/cart' +import type { Cart } from '@vercel/commerce/types/cart' +import type { OrdercloudCart, OrdercloudLineItem } from '../../types/cart' export function formatCart( cart: OrdercloudCart, @@ -20,7 +21,7 @@ export function formatCart( name: lineItem.Product.Name, quantity: lineItem.Quantity, discounts: [], - path: lineItem.ProductID, + path: `/product/${lineItem.ProductID}`, variant: { id: lineItem.Variant ? String(lineItem.Variant.ID) : '', sku: lineItem.ID, diff --git a/packages/ordercloud/src/api/utils/fetch-rest.ts b/packages/ordercloud/src/api/utils/fetch-rest.ts index 5b70b9dff..3724ebe84 100644 --- a/packages/ordercloud/src/api/utils/fetch-rest.ts +++ b/packages/ordercloud/src/api/utils/fetch-rest.ts @@ -1,11 +1,7 @@ -import vercelFetch from '@vercel/fetch' import { FetcherError } from '@vercel/commerce/utils/errors' -import { CustomNodeJsGlobal } from '../../types/node'; - import { OrdercloudConfig } from '../index' -// Get an instance to vercel fetch -const fetch = vercelFetch() +export let token: string | null = null // Get token util async function getToken({ @@ -16,7 +12,12 @@ async function getToken({ baseUrl: string clientId: string clientSecret?: string -}): Promise { +}): Promise<{ + access_token: string + expires_in: number + refresh_token: string + token_type: string +}> { // If not, get a new one and store it const authResponse = await fetch(`${baseUrl}/oauth/token`, { method: 'POST', @@ -32,6 +33,8 @@ async function getToken({ // Get the body of it const error = await authResponse.json() + console.log(JSON.stringify(error, null, 2)) + // And return an error throw new FetcherError({ errors: [{ message: error.error_description.Code }], @@ -40,9 +43,7 @@ async function getToken({ } // Return the token - return authResponse - .json() - .then((response: { access_token: string }) => response.access_token) + return authResponse.json() } export async function fetchData(opts: { @@ -74,12 +75,18 @@ export async function fetchData(opts: { // If something failed getting the data response if (!dataResponse.ok) { - // Get the body of it - const error = await dataResponse.textConverted() + let errors - // And return an error + try { + // Get the body of it + const error = await dataResponse.json() + errors = error.Errors + } catch (e) { + const message = await dataResponse.text() + errors = [{ message }] + } throw new FetcherError({ - errors: [{ message: error || dataResponse.statusText }], + errors, status: dataResponse.status, }) } @@ -93,42 +100,6 @@ export async function fetchData(opts: { } } -export const createMiddlewareFetcher: ( - getConfig: () => OrdercloudConfig -) => ( - method: string, - path: string, - body?: Record, - fetchOptions?: Record -) => Promise = - (getConfig) => - async ( - method: string, - path: string, - body?: Record, - fetchOptions?: Record - ) => { - // Get provider config - const config = getConfig() - - // Get a token - const token = await getToken({ - baseUrl: config.commerceUrl, - clientId: process.env.ORDERCLOUD_MIDDLEWARE_CLIENT_ID as string, - clientSecret: process.env.ORDERCLOUD_MIDDLEWARE_CLIENT_SECRET, - }) - - // Return the data and specify the expected type - return fetchData({ - token, - fetchOptions, - method, - config, - path, - body, - }) - } - export const createBuyerFetcher: ( getConfig: () => OrdercloudConfig ) => ( @@ -144,28 +115,27 @@ export const createBuyerFetcher: ( body?: Record, fetchOptions?: Record ) => { - const customGlobal = global as unknown as CustomNodeJsGlobal; + if (fetchOptions?.token) { + token = fetchOptions?.token + } // Get provider config const config = getConfig() + let meta: any = {} - // If a token was passed, set it on global - if (fetchOptions?.token) { - customGlobal.token = fetchOptions.token - } - - // Get a token - if (!customGlobal.token) { - customGlobal.token = await getToken({ + if (!token) { + const newToken = await getToken({ baseUrl: config.commerceUrl, clientId: process.env.ORDERCLOUD_BUYER_CLIENT_ID as string, }) + token = newToken.access_token + meta.token = newToken } // Return the data and specify the expected type const data = await fetchData({ - token: customGlobal.token as string, + token, fetchOptions, config, method, @@ -175,6 +145,6 @@ export const createBuyerFetcher: ( return { ...data, - meta: { token: customGlobal.token as string }, + meta, } } diff --git a/packages/ordercloud/src/cart/use-add-item.tsx b/packages/ordercloud/src/cart/use-add-item.tsx index c9d315301..44852390b 100644 --- a/packages/ordercloud/src/cart/use-add-item.tsx +++ b/packages/ordercloud/src/cart/use-add-item.tsx @@ -10,7 +10,7 @@ export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'POST', }, async fetcher({ input: item, options, fetch }) { diff --git a/packages/ordercloud/src/cart/use-cart.tsx b/packages/ordercloud/src/cart/use-cart.tsx index 01c3a1cab..58f49b142 100644 --- a/packages/ordercloud/src/cart/use-cart.tsx +++ b/packages/ordercloud/src/cart/use-cart.tsx @@ -8,7 +8,7 @@ export default useCart as UseCart export const handler: SWRHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'GET', }, useHook: ({ useData }) => diff --git a/packages/ordercloud/src/cart/use-remove-item.tsx b/packages/ordercloud/src/cart/use-remove-item.tsx index fba15f8d5..b9e43cf52 100644 --- a/packages/ordercloud/src/cart/use-remove-item.tsx +++ b/packages/ordercloud/src/cart/use-remove-item.tsx @@ -2,12 +2,18 @@ import type { MutationHookContext, HookFetcherContext, } from '@vercel/commerce/utils/types' -import type { Cart, LineItem, RemoveItemHook } from '@vercel/commerce/types/cart' +import type { + Cart, + LineItem, + RemoveItemHook, +} from '@vercel/commerce/types/cart' import { useCallback } from 'react' import { ValidationError } from '@vercel/commerce/utils/errors' -import useRemoveItem, { UseRemoveItem } from '@vercel/commerce/cart/use-remove-item' +import useRemoveItem, { + UseRemoveItem, +} from '@vercel/commerce/cart/use-remove-item' import useCart from './use-cart' @@ -23,7 +29,7 @@ export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'DELETE', }, async fetcher({ diff --git a/packages/ordercloud/src/cart/use-update-item.tsx b/packages/ordercloud/src/cart/use-update-item.tsx index 7a5f6fcf7..bfbf2902c 100644 --- a/packages/ordercloud/src/cart/use-update-item.tsx +++ b/packages/ordercloud/src/cart/use-update-item.tsx @@ -9,7 +9,9 @@ import debounce from 'lodash.debounce' import { MutationHook } from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useUpdateItem, { UseUpdateItem } from '@vercel/commerce/cart/use-update-item' +import useUpdateItem, { + UseUpdateItem, +} from '@vercel/commerce/cart/use-update-item' import { handler as removeItemHandler } from './use-remove-item' import useCart from './use-cart' @@ -22,7 +24,7 @@ export default useUpdateItem as UseUpdateItem export const handler: MutationHook = { fetchOptions: { - url: '/api/cart', + url: '/api/commerce/cart', method: 'PUT', }, async fetcher({ diff --git a/packages/ordercloud/src/checkout/use-checkout.tsx b/packages/ordercloud/src/checkout/use-checkout.tsx index f60ebfdd9..17897a592 100644 --- a/packages/ordercloud/src/checkout/use-checkout.tsx +++ b/packages/ordercloud/src/checkout/use-checkout.tsx @@ -2,14 +2,16 @@ import type { GetCheckoutHook } from '@vercel/commerce/types/checkout' import { useMemo } from 'react' import { SWRHook } from '@vercel/commerce/utils/types' -import useCheckout, { UseCheckout } from '@vercel/commerce/checkout/use-checkout' +import useCheckout, { + UseCheckout, +} from '@vercel/commerce/checkout/use-checkout' import useSubmitCheckout from './use-submit-checkout' export default useCheckout as UseCheckout export const handler: SWRHook = { fetchOptions: { - url: '/api/checkout', + url: '/api/commerce/checkout', method: 'GET', }, useHook: ({ useData }) => @@ -24,7 +26,7 @@ export const handler: SWRHook = { Object.create(response, { isEmpty: { get() { - return (response.data?.lineItems?.length ?? 0) <= 0 + return response.data?.lineItems?.length ?? 0 }, enumerable: true, }, diff --git a/packages/ordercloud/src/checkout/use-submit-checkout.tsx b/packages/ordercloud/src/checkout/use-submit-checkout.tsx index 79c438499..d8d78ef8b 100644 --- a/packages/ordercloud/src/checkout/use-submit-checkout.tsx +++ b/packages/ordercloud/src/checkout/use-submit-checkout.tsx @@ -10,7 +10,7 @@ export default useSubmitCheckout as UseSubmitCheckout export const handler: MutationHook = { fetchOptions: { - url: '/api/checkout', + url: '/api/commerce/checkout', method: 'POST', }, async fetcher({ input: item, options, fetch }) { diff --git a/packages/ordercloud/src/customer/address/use-add-item.tsx b/packages/ordercloud/src/customer/address/use-add-item.tsx index 798f5fe22..42bd53d0f 100644 --- a/packages/ordercloud/src/customer/address/use-add-item.tsx +++ b/packages/ordercloud/src/customer/address/use-add-item.tsx @@ -2,14 +2,16 @@ import type { AddItemHook } from '@vercel/commerce/types/customer/address' import type { MutationHook } from '@vercel/commerce/utils/types' import { useCallback } from 'react' -import useAddItem, { UseAddItem } from '@vercel/commerce/customer/address/use-add-item' +import useAddItem, { + UseAddItem, +} from '@vercel/commerce/customer/address/use-add-item' import useAddresses from './use-addresses' export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/customer/address', + url: '/api/commerce/customer/address', method: 'POST', }, async fetcher({ input: item, options, fetch }) { @@ -27,9 +29,7 @@ export const handler: MutationHook = { return useCallback( async function addItem(input) { const data = await fetch({ input }) - - await mutate([data], false) - + await mutate(data ? [data] : [], false) return data }, [fetch, mutate] diff --git a/packages/ordercloud/src/customer/address/use-addresses.tsx b/packages/ordercloud/src/customer/address/use-addresses.tsx index fd6807a25..704b02c2f 100644 --- a/packages/ordercloud/src/customer/address/use-addresses.tsx +++ b/packages/ordercloud/src/customer/address/use-addresses.tsx @@ -10,7 +10,7 @@ export default useAddresses as UseAddresses export const handler: SWRHook = { fetchOptions: { - url: '/api/customer/address', + url: '/api/commerce/customer/address', method: 'GET', }, useHook: ({ useData }) => diff --git a/packages/ordercloud/src/customer/address/use-remove-item.tsx b/packages/ordercloud/src/customer/address/use-remove-item.tsx index ac805dbc5..0e8cf9b17 100644 --- a/packages/ordercloud/src/customer/address/use-remove-item.tsx +++ b/packages/ordercloud/src/customer/address/use-remove-item.tsx @@ -2,7 +2,10 @@ import type { MutationHookContext, HookFetcherContext, } from '@vercel/commerce/utils/types' -import type { Address, RemoveItemHook } from '@vercel/commerce/types/customer/address' +import type { + Address, + RemoveItemHook, +} from '@vercel/commerce/types/customer/address' import { useCallback } from 'react' @@ -14,7 +17,7 @@ import useRemoveItem, { import useAddresses from './use-addresses' export type RemoveItemFn = T extends Address - ? (input?: RemoveItemActionInput) => Promise
+ ? (input?: RemoveItemActionInput) => Promise
: (input: RemoveItemActionInput) => Promise
export type RemoveItemActionInput = T extends Address @@ -25,7 +28,7 @@ export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { - url: '/api/customer/address', + url: '/api/commerce/customer/address', method: 'DELETE', }, async fetcher({ diff --git a/packages/ordercloud/src/customer/address/use-update-item.tsx b/packages/ordercloud/src/customer/address/use-update-item.tsx index d65956b7b..a657c4293 100644 --- a/packages/ordercloud/src/customer/address/use-update-item.tsx +++ b/packages/ordercloud/src/customer/address/use-update-item.tsx @@ -2,7 +2,10 @@ import type { HookFetcherContext, MutationHookContext, } from '@vercel/commerce/utils/types' -import type { UpdateItemHook, Address } from '@vercel/commerce/types/customer/address' +import type { + UpdateItemHook, + Address, +} from '@vercel/commerce/types/customer/address' import { useCallback } from 'react' @@ -21,7 +24,7 @@ export default useUpdateItem as UseUpdateItem export const handler: MutationHook = { fetchOptions: { - url: '/api/customer/address', + url: '/api/commerce/customer/address', method: 'PUT', }, async fetcher({ diff --git a/packages/ordercloud/src/customer/card/use-add-item.tsx b/packages/ordercloud/src/customer/card/use-add-item.tsx index 8e7d27885..2cfdc5312 100644 --- a/packages/ordercloud/src/customer/card/use-add-item.tsx +++ b/packages/ordercloud/src/customer/card/use-add-item.tsx @@ -2,14 +2,16 @@ import type { AddItemHook } from '@vercel/commerce/types/customer/card' import type { MutationHook } from '@vercel/commerce/utils/types' import { useCallback } from 'react' -import useAddItem, { UseAddItem } from '@vercel/commerce/customer/card/use-add-item' +import useAddItem, { + UseAddItem, +} from '@vercel/commerce/customer/card/use-add-item' import useCards from './use-cards' export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - url: '/api/customer/card', + url: '/api/commerce/customer/card', method: 'POST', }, async fetcher({ input: item, options, fetch }) { @@ -28,7 +30,7 @@ export const handler: MutationHook = { async function addItem(input) { const data = await fetch({ input }) - await mutate([data], false) + await mutate(data ? [data] : [], false) return data }, diff --git a/packages/ordercloud/src/customer/card/use-cards.tsx b/packages/ordercloud/src/customer/card/use-cards.tsx index 6438543e1..ef5fc5282 100644 --- a/packages/ordercloud/src/customer/card/use-cards.tsx +++ b/packages/ordercloud/src/customer/card/use-cards.tsx @@ -8,7 +8,7 @@ export default useCard as UseCards export const handler: SWRHook = { fetchOptions: { - url: '/api/customer/card', + url: '/api/commerce/customer/card', method: 'GET', }, useHook: ({ useData }) => diff --git a/packages/ordercloud/src/customer/card/use-remove-item.tsx b/packages/ordercloud/src/customer/card/use-remove-item.tsx index 23979bf3f..f815a9b51 100644 --- a/packages/ordercloud/src/customer/card/use-remove-item.tsx +++ b/packages/ordercloud/src/customer/card/use-remove-item.tsx @@ -14,7 +14,7 @@ import useRemoveItem, { import useCards from './use-cards' export type RemoveItemFn = T extends Card - ? (input?: RemoveItemActionInput) => Promise + ? (input?: RemoveItemActionInput) => Promise : (input: RemoveItemActionInput) => Promise export type RemoveItemActionInput = T extends Card @@ -25,7 +25,7 @@ export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { - url: '/api/customer/card', + url: '/api/commerce/customer/card', method: 'DELETE', }, async fetcher({ diff --git a/packages/ordercloud/src/customer/card/use-update-item.tsx b/packages/ordercloud/src/customer/card/use-update-item.tsx index faa900744..73d792af0 100644 --- a/packages/ordercloud/src/customer/card/use-update-item.tsx +++ b/packages/ordercloud/src/customer/card/use-update-item.tsx @@ -21,7 +21,7 @@ export default useUpdateItem as UseUpdateItem export const handler: MutationHook = { fetchOptions: { - url: '/api/customer/card', + url: '/api/commerce/customer/card', method: 'PUT', }, async fetcher({ diff --git a/packages/ordercloud/src/product/use-search.tsx b/packages/ordercloud/src/product/use-search.tsx index 0cb54e92c..83d5373c1 100644 --- a/packages/ordercloud/src/product/use-search.tsx +++ b/packages/ordercloud/src/product/use-search.tsx @@ -5,7 +5,7 @@ export default useSearch as UseSearch export const handler: SWRHook = { fetchOptions: { - url: '/api/catalog/products', + url: '/api/commerce/catalog/products', method: 'GET', }, fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { diff --git a/packages/ordercloud/src/types/cart.ts b/packages/ordercloud/src/types/cart.ts index 389a5a666..1fbeb09b5 100644 --- a/packages/ordercloud/src/types/cart.ts +++ b/packages/ordercloud/src/types/cart.ts @@ -1,7 +1,3 @@ -import * as Core from '@vercel/commerce/types/cart' - -export * from '@vercel/commerce/types/cart' - export interface OrdercloudCart { ID: string FromUser: { @@ -97,30 +93,3 @@ export interface OrdercloudLineItem { Specs: [] xp: null } - -/** - * Extend core cart types - */ - -export type Cart = Core.Cart & { - lineItems: Core.LineItem[] - url?: string -} - -export type CartTypes = Core.CartTypes - -export type CartHooks = Core.CartHooks - -export type GetCartHook = CartHooks['getCart'] -export type AddItemHook = CartHooks['addItem'] -export type UpdateItemHook = CartHooks['updateItem'] -export type RemoveItemHook = CartHooks['removeItem'] - -export type CartSchema = Core.CartSchema - -export type CartHandlers = Core.CartHandlers - -export type GetCartHandler = CartHandlers['getCart'] -export type AddItemHandler = CartHandlers['addItem'] -export type UpdateItemHandler = CartHandlers['updateItem'] -export type RemoveItemHandler = CartHandlers['removeItem'] diff --git a/packages/ordercloud/src/types/checkout.ts b/packages/ordercloud/src/types/checkout.ts deleted file mode 100644 index 976d78e7a..000000000 --- a/packages/ordercloud/src/types/checkout.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as Core from '@vercel/commerce/types/checkout' - -export type CheckoutTypes = Core.CheckoutTypes -export type CheckoutSchema = Core.CheckoutSchema diff --git a/packages/ordercloud/src/types/customer/address.ts b/packages/ordercloud/src/types/customer/address.ts index 3576b676c..ec7e5d74e 100644 --- a/packages/ordercloud/src/types/customer/address.ts +++ b/packages/ordercloud/src/types/customer/address.ts @@ -1,9 +1,3 @@ -import * as Core from '@vercel/commerce/types/customer/address' - -export type CustomerAddressTypes = Core.CustomerAddressTypes -export type CustomerAddressSchema = - Core.CustomerAddressSchema - export interface OrdercloudAddress { ID: string FromCompanyID: string diff --git a/packages/ordercloud/src/types/customer/card.ts b/packages/ordercloud/src/types/customer/card.ts index 293d5041a..8b4851cdb 100644 --- a/packages/ordercloud/src/types/customer/card.ts +++ b/packages/ordercloud/src/types/customer/card.ts @@ -1,8 +1,3 @@ -import * as Core from '@vercel/commerce/types/customer/card' - -export type CustomerCardTypes = Core.CustomerCardTypes -export type CustomerCardSchema = Core.CustomerCardSchema - export interface OredercloudCreditCard { ID: string Editable: boolean diff --git a/packages/ordercloud/src/types/product.ts b/packages/ordercloud/src/types/product.ts index 8ccb778d2..e0338ee2d 100644 --- a/packages/ordercloud/src/types/product.ts +++ b/packages/ordercloud/src/types/product.ts @@ -1,4 +1,4 @@ -interface RawVariantSpec { +export interface RawVariantSpec { SpecID: string Name: string OptionID: string diff --git a/packages/ordercloud/src/utils/product.ts b/packages/ordercloud/src/utils/product.ts index 6da3bf86b..3e6b265b6 100644 --- a/packages/ordercloud/src/utils/product.ts +++ b/packages/ordercloud/src/utils/product.ts @@ -8,6 +8,7 @@ export function normalize(product: RawProduct): Product { name: product.Name, description: product.Description, slug: product.ID, + path: `/${product.ID}`, images: product.xp.Images, price: { value: product.xp.Price, @@ -16,6 +17,8 @@ export function normalize(product: RawProduct): Product { variants: product.xp.Variants?.length ? product.xp.Variants.map((variant) => ({ id: variant.ID, + sku: variant.ID, + name: product.Name, options: variant.Specs.map((spec) => ({ id: spec.SpecID, __typename: 'MultipleChoiceOption', @@ -27,12 +30,7 @@ export function normalize(product: RawProduct): Product { ], })), })) - : [ - { - id: '', - options: [], - }, - ], + : [], options: product.xp.Specs?.length ? product.xp.Specs.map((spec) => ({ id: spec.ID, diff --git a/packages/ordercloud/src/wishlist/use-wishlist.tsx b/packages/ordercloud/src/wishlist/use-wishlist.tsx index b2785d46f..9d15370ff 100644 --- a/packages/ordercloud/src/wishlist/use-wishlist.tsx +++ b/packages/ordercloud/src/wishlist/use-wishlist.tsx @@ -1,19 +1,8 @@ import { HookFetcher } from '@vercel/commerce/utils/types' -import type { Product } from '@vercel/commerce/types/product' +import type { Wishlist } from '@vercel/commerce/types/wishlist' const defaultOpts = {} -export type Wishlist = { - items: [ - { - product_id: number - variant_id: number - id: number - product: Product - } - ] -} - export interface UseWishlistOptions { includeProducts?: boolean } diff --git a/packages/saleor/package.json b/packages/saleor/package.json index 16fb0a654..d2cf2bad1 100644 --- a/packages/saleor/package.json +++ b/packages/saleor/package.json @@ -49,34 +49,39 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", + "@vercel/commerce": "workspace:*", + "js-cookie": "^3.0.1", "lodash.debounce": "^4.0.8" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { - "@graphql-codegen/cli": "^2.3.1", + "@babel/core": "^7.20.5", + "@graphql-codegen/cli": "^2.7.0", "@graphql-codegen/schema-ast": "^2.4.1", "@graphql-codegen/typescript": "^2.4.2", "@graphql-codegen/typescript-operations": "^2.2.2", "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", + "@types/js-cookie": "^3.0.2", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "^2.6.2", + "@types/react": "^18.0.14", + "graphql": "^16.0.0", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "ts-node": "^10.9.1", + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/saleor/src/api/endpoints/cart.ts b/packages/saleor/src/api/endpoints/cart.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/cart.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/endpoints/catalog/products.ts b/packages/saleor/src/api/endpoints/catalog/products.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/endpoints/checkout/index.ts b/packages/saleor/src/api/endpoints/checkout/index.ts index 2468c8d97..ccfa16135 100644 --- a/packages/saleor/src/api/endpoints/checkout/index.ts +++ b/packages/saleor/src/api/endpoints/checkout/index.ts @@ -6,9 +6,11 @@ export type CheckoutAPI = GetAPISchema export type CheckoutEndpoint = CheckoutAPI['endpoint'] -const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, res, config }) => { - try { - const html = ` +const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ + req, + config, +}) => { + const html = ` @@ -30,16 +32,11 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, r ` - res.status(200) - res.setHeader('Content-Type', 'text/html') - res.write(html) - res.end() - } catch (error) { - console.error(error) - - const message = 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + return { + html, + headers: { + 'Content-Type': 'text/html', + }, } } diff --git a/packages/saleor/src/api/endpoints/customer/address.ts b/packages/saleor/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/saleor/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/saleor/src/api/endpoints/customer/card.ts b/packages/saleor/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/saleor/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/saleor/src/api/endpoints/customer/index.ts b/packages/saleor/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/saleor/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/saleor/src/api/endpoints/index.ts b/packages/saleor/src/api/endpoints/index.ts new file mode 100644 index 000000000..4c06a91c9 --- /dev/null +++ b/packages/saleor/src/api/endpoints/index.ts @@ -0,0 +1,12 @@ +import type { Provider, SaleorAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' +import checkout from './checkout' + +const endpoints = { + checkout, +} + +export default function saleorAPI(commerce: SaleorAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/saleor/src/api/endpoints/login.ts b/packages/saleor/src/api/endpoints/login.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/login.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/endpoints/logout.ts b/packages/saleor/src/api/endpoints/logout.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/endpoints/signup.ts b/packages/saleor/src/api/endpoints/signup.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/endpoints/wishlist.ts b/packages/saleor/src/api/endpoints/wishlist.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/saleor/src/api/endpoints/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/saleor/src/api/operations/get-all-pages.ts b/packages/saleor/src/api/operations/get-all-pages.ts index 37f2e3ab2..e53cc8f31 100644 --- a/packages/saleor/src/api/operations/get-all-pages.ts +++ b/packages/saleor/src/api/operations/get-all-pages.ts @@ -6,9 +6,12 @@ import * as Query from '../../utils/queries' export type Page = any -export type GetAllPagesResult = T +export type GetAllPagesResult = + T -export default function getAllPagesOperation({ commerce }: OperationContext) { +export default function getAllPagesOperation({ + commerce, +}: OperationContext) { async function getAllPages({ query = Query.PageMany, config, @@ -34,11 +37,15 @@ export default function getAllPagesOperation({ commerce }: OperationContext ({ - ...node, - url: `/${locale}/${slug}`, - name, - })) + const pages = + data?.pages?.edges?.map( + ({ node: { title: name, slug, ...node } }: PageCountableEdge) => ({ + id: node.id, + url: `/${locale}/${slug}`, + body: node.content || '', + name, + }) + ) ?? [] return { pages } } diff --git a/packages/saleor/src/api/operations/get-all-product-paths.ts b/packages/saleor/src/api/operations/get-all-product-paths.ts index 66e8f95c9..6df489bae 100644 --- a/packages/saleor/src/api/operations/get-all-product-paths.ts +++ b/packages/saleor/src/api/operations/get-all-product-paths.ts @@ -3,15 +3,16 @@ import { ProductCountableEdge } from '../../../schema' import type { Provider, SaleorConfig } from '..' import { getAllProductsPathsQuery } from '../../utils/queries' -import fetchAllProducts from '../utils/fetch-all-products' export type GetAllProductPathsResult = { products: Array<{ path: string }> } -export default function getAllProductPathsOperation({ commerce }: OperationContext) { +export default function getAllProductPathsOperation({ + commerce, +}: OperationContext) { async function getAllProductPaths({ - query, + query = getAllProductsPathsQuery, config, variables, }: { @@ -21,16 +22,15 @@ export default function getAllProductPathsOperation({ commerce }: OperationConte } = {}): Promise { config = commerce.getConfig(config) - const products = await fetchAllProducts({ - config, - query: getAllProductsPathsQuery, - variables, - }) + const { data }: any = await config.fetch(query, { variables }) return { - products: products?.map(({ node: { slug } }: ProductCountableEdge) => ({ - path: `/${slug}`, - })), + products: data?.products?.edges?.map( + ({ node: { slug } }: ProductCountableEdge) => + ({ + path: `/${slug}`, + } ?? []) + ), } } diff --git a/packages/saleor/src/api/operations/get-all-products.ts b/packages/saleor/src/api/operations/get-all-products.ts index f7982adee..1be61b4e0 100644 --- a/packages/saleor/src/api/operations/get-all-products.ts +++ b/packages/saleor/src/api/operations/get-all-products.ts @@ -12,7 +12,9 @@ type ReturnType = { products: Product[] } -export default function getAllProductsOperation({ commerce }: OperationContext) { +export default function getAllProductsOperation({ + commerce, +}: OperationContext) { async function getAllProducts({ query = Query.ProductMany, variables, @@ -36,23 +38,28 @@ export default function getAllProductsOperation({ commerce }: OperationContext

normalizeProduct(p)) ?? [] + data?.collection.products?.edges?.map( + ({ node: p }: ProductCountableEdge) => normalizeProduct(p) + ) ?? [] return { products, } } else { - const products = data.products?.edges?.map(({ node: p }: ProductCountableEdge) => normalizeProduct(p)) ?? [] + const products = + data?.products?.edges?.map(({ node: p }: ProductCountableEdge) => + normalizeProduct(p) + ) ?? [] return { products, diff --git a/packages/saleor/src/api/operations/get-page.ts b/packages/saleor/src/api/operations/get-page.ts index bab9d92c5..6fa427691 100644 --- a/packages/saleor/src/api/operations/get-page.ts +++ b/packages/saleor/src/api/operations/get-page.ts @@ -8,7 +8,9 @@ export type Page = any export type GetPageResult = T -export default function getPageOperation({ commerce }: OperationContext) { +export default function getPageOperation({ + commerce, +}: OperationContext) { async function getPage({ query = Query.PageOne, variables, @@ -21,9 +23,7 @@ export default function getPageOperation({ commerce }: OperationContext { const { fetch, locale = 'en-US' } = commerce.getConfig(config) - const { - data: { page }, - } = await fetch( + const { data } = await fetch( query, { variables }, { @@ -36,13 +36,15 @@ export default function getPageOperation({ commerce }: OperationContext) { +export default function getProductOperation({ + commerce, +}: OperationContext) { async function getProduct({ query = Query.ProductOneBySlug, variables, @@ -38,7 +40,7 @@ export default function getProductOperation({ commerce }: OperationContext) { +export default function loginOperation({ + commerce, +}: OperationContext) { async function login({ query = Mutation.SessionCreate, variables, @@ -13,7 +14,7 @@ export default function loginOperation({ commerce }: OperationContext) }: { query?: string variables: any - res: ServerResponse + res: Response config?: SaleorConfig }): Promise { config = commerce.getConfig(config) diff --git a/packages/saleor/src/api/utils/fetch-all-products.ts b/packages/saleor/src/api/utils/fetch-all-products.ts deleted file mode 100644 index 761e1271d..000000000 --- a/packages/saleor/src/api/utils/fetch-all-products.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ProductCountableEdge } from '../../../schema' -import { SaleorConfig } from '..' - -const fetchAllProducts = async ({ - config, - query, - variables, - acc = [], - cursor, -}: { - config: SaleorConfig - query: string - acc?: ProductCountableEdge[] - variables?: any - cursor?: string -}): Promise => { - const { data } = await config.fetch(query, { - variables: { ...variables, cursor }, - }) - - const edges: ProductCountableEdge[] = data.products?.edges ?? [] - const hasNextPage = data.products?.pageInfo?.hasNextPage - acc = acc.concat(edges) - - if (hasNextPage) { - const cursor = edges.pop()?.cursor - if (cursor) { - return fetchAllProducts({ - config, - query, - variables, - acc, - cursor, - }) - } - } - - return acc -} - -export default fetchAllProducts diff --git a/packages/saleor/src/api/utils/fetch-graphql-api.ts b/packages/saleor/src/api/utils/fetch-graphql-api.ts index de4d45aae..ba2183797 100644 --- a/packages/saleor/src/api/utils/fetch-graphql-api.ts +++ b/packages/saleor/src/api/utils/fetch-graphql-api.ts @@ -1,35 +1,43 @@ -import type { GraphQLFetcher } from '@vercel/commerce/api' -import fetch from './fetch' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import { API_URL } from '../../const' import { getError } from '../../utils/handle-fetch-response' -import { getCommerceApi } from '..' import { getToken } from '../../utils/index' -const fetchGraphqlApi: GraphQLFetcher = async (query: string, { variables } = {}, fetchOptions) => { - const config = getCommerceApi().getConfig() +const fetchGraphqlApi: GraphQLFetcher = async ( + query: string, + { variables } = {}, + options?: FetchOptions +) => { const token = getToken() const res = await fetch(API_URL!, { - ...fetchOptions, - method: 'POST', + method: options?.method || 'POST', headers: { ...(token && { Authorization: `Bearer ${token}`, }), - ...fetchOptions?.headers, + ...options?.headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ + ...options?.body, query, variables, }), }) - const { data, errors, status } = await res.json() + const { data, errors, message, type, status } = await res.json() - if (errors) { - throw getError(errors, status) + if (errors || res.status >= 400) { + throw getError( + errors || [ + { + message: `${type ? `${type}, ` : ''}${message}`, + }, + ], + status || res.status + ) } return { data, res } diff --git a/packages/saleor/src/api/utils/is-allowed-method.ts b/packages/saleor/src/api/utils/is-allowed-method.ts deleted file mode 100644 index cbaab2251..000000000 --- a/packages/saleor/src/api/utils/is-allowed-method.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next' - -export default function isAllowedMethod(req: NextApiRequest, res: NextApiResponse, allowedMethods: string[]) { - const methods = allowedMethods.includes('OPTIONS') ? allowedMethods : [...allowedMethods, 'OPTIONS'] - - if (!req.method || !methods.includes(req.method)) { - res.status(405) - res.setHeader('Allow', methods.join(', ')) - res.end() - return false - } - - if (req.method === 'OPTIONS') { - res.status(200) - res.setHeader('Allow', methods.join(', ')) - res.setHeader('Content-Length', '0') - res.end() - return false - } - - return true -} diff --git a/packages/saleor/src/cart/use-remove-item.tsx b/packages/saleor/src/cart/use-remove-item.tsx index 09d1acab7..f3972c49b 100644 --- a/packages/saleor/src/cart/use-remove-item.tsx +++ b/packages/saleor/src/cart/use-remove-item.tsx @@ -1,17 +1,27 @@ import { useCallback } from 'react' -import type { MutationHookContext, HookFetcherContext, MutationHook } from '@vercel/commerce/utils/types' -import useRemoveItem, { UseRemoveItem } from '@vercel/commerce/cart/use-remove-item' +import type { + MutationHookContext, + HookFetcherContext, + MutationHook, +} from '@vercel/commerce/utils/types' +import useRemoveItem, { + UseRemoveItem, +} from '@vercel/commerce/cart/use-remove-item' import useCart from './use-cart' import * as mutation from '../utils/mutations' import { getCheckoutId, checkoutToCart } from '../utils' import { Mutation, MutationCheckoutLineDeleteArgs } from '../../schema' -import { LineItem, RemoveItemHook } from '../types/cart' +import type { LineItem, RemoveItemHook } from '@vercel/commerce/types/cart' export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { query: mutation.CheckoutLineDelete }, - async fetcher({ input: { itemId }, options, fetch }: HookFetcherContext) { + async fetcher({ + input: { itemId }, + options, + fetch, + }: HookFetcherContext) { const data = await fetch({ ...options, variables: { @@ -27,7 +37,7 @@ export const handler = { const { mutate } = useCart() return useCallback( - async function removeItem(input) { + async function removeItem(input: { id: string }) { const data = await fetch({ input: { itemId: input.id } }) await mutate(data, false) diff --git a/packages/saleor/src/cart/use-update-item.tsx b/packages/saleor/src/cart/use-update-item.tsx index ffca9b2f8..6fc6d2b10 100644 --- a/packages/saleor/src/cart/use-update-item.tsx +++ b/packages/saleor/src/cart/use-update-item.tsx @@ -1,19 +1,23 @@ import { useCallback } from 'react' import debounce from 'lodash.debounce' -import type { HookFetcherContext, MutationHookContext } from '@vercel/commerce/utils/types' +import type { + HookFetcherContext, + MutationHookContext, +} from '@vercel/commerce/utils/types' import { ValidationError } from '@vercel/commerce/utils/errors' -import useUpdateItem, { UseUpdateItem } from '@vercel/commerce/cart/use-update-item' +import useUpdateItem, { + UseUpdateItem, +} from '@vercel/commerce/cart/use-update-item' import useCart from './use-cart' import { handler as removeItemHandler } from './use-remove-item' -import type { LineItem } from '../types' import { checkoutToCart } from '../utils' import { getCheckoutId } from '../utils' -import { Mutation, MutationCheckoutLinesUpdateArgs } from '../../schema' import * as mutation from '../utils/mutations' -import type { UpdateItemHook } from '../types/cart' +import type { UpdateItemHook, LineItem } from '@vercel/commerce/types/cart' +import type { Mutation, MutationCheckoutLinesUpdateArgs } from '../../schema' export type UpdateItemActionInput = T extends LineItem ? Partial @@ -23,7 +27,11 @@ export default useUpdateItem as UseUpdateItem export const handler = { fetchOptions: { query: mutation.CheckoutLineUpdate }, - async fetcher({ input: { itemId, item }, options, fetch }: HookFetcherContext) { + async fetcher({ + input: { itemId, item }, + options, + fetch, + }: HookFetcherContext) { if (Number.isInteger(item.quantity)) { // Also allow the update hook to remove an item if the quantity is lower than 1 if (item.quantity! < 1) { @@ -40,7 +48,10 @@ export const handler = { } const checkoutId = getCheckoutId().checkoutId - const { checkoutLinesUpdate } = await fetch({ + const { checkoutLinesUpdate } = await fetch< + Mutation, + MutationCheckoutLinesUpdateArgs + >({ ...options, variables: { checkoutId, diff --git a/packages/saleor/src/fetcher.ts b/packages/saleor/src/fetcher.ts index c1be921c5..4e7c5f194 100644 --- a/packages/saleor/src/fetcher.ts +++ b/packages/saleor/src/fetcher.ts @@ -2,7 +2,12 @@ import { Fetcher } from '@vercel/commerce/utils/types' import { API_URL } from './const' import { getToken, handleFetchResponse } from './utils' -const fetcher: Fetcher = async ({ url = API_URL, method = 'POST', variables, query }) => { +const fetcher: Fetcher = async ({ + url = API_URL, + method = 'POST', + variables, + query, +}) => { const token = getToken() return handleFetchResponse( diff --git a/packages/saleor/src/product/use-search.tsx b/packages/saleor/src/product/use-search.tsx index 69212cba1..fa5a2e165 100644 --- a/packages/saleor/src/product/use-search.tsx +++ b/packages/saleor/src/product/use-search.tsx @@ -12,8 +12,8 @@ export default useSearch as UseSearch export type SearchProductsInput = { search?: string - categoryId?: string | number - brandId?: string | number + categoryId?: string + brandId?: string sort?: string } @@ -38,7 +38,7 @@ export const handler: SWRHook = { let edges if (categoryId) { - edges = data.collection?.products?.edges ?? [] + edges = data?.collection?.products?.edges ?? [] // FIXME @zaiste, no `vendor` in Saleor // if (brandId) { // edges = edges.filter( @@ -47,11 +47,13 @@ export const handler: SWRHook = { // ) // } } else { - edges = data.products?.edges ?? [] + edges = data?.products?.edges ?? [] } return { - products: edges.map(({ node }: ProductCountableEdge) => normalizeProduct(node)), + products: edges.map(({ node }: ProductCountableEdge) => + normalizeProduct(node) + ), found: !!edges.length, } }, diff --git a/packages/saleor/src/types/cart.ts b/packages/saleor/src/types/cart.ts deleted file mode 100644 index 9a4d29387..000000000 --- a/packages/saleor/src/types/cart.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as Core from '@vercel/commerce/types/cart' - -export * from '@vercel/commerce/types/cart' - -export type SaleorCart = {} - -/** - * Extend core cart types - */ - -export type Cart = Core.Cart & { - lineItems: Core.LineItem[] - url?: string -} - -export type CartTypes = Core.CartTypes - -export type CartHooks = Core.CartHooks - -export type GetCartHook = CartHooks['getCart'] -export type AddItemHook = CartHooks['addItem'] -export type UpdateItemHook = CartHooks['updateItem'] -export type RemoveItemHook = CartHooks['removeItem'] - -export type CartSchema = Core.CartSchema - -export type CartHandlers = Core.CartHandlers - -export type GetCartHandler = CartHandlers['getCart'] -export type AddItemHandler = CartHandlers['addItem'] -export type UpdateItemHandler = CartHandlers['updateItem'] -export type RemoveItemHandler = CartHandlers['removeItem'] diff --git a/packages/saleor/src/utils/get-categories.ts b/packages/saleor/src/utils/get-categories.ts index e2cc72533..13204a89d 100644 --- a/packages/saleor/src/utils/get-categories.ts +++ b/packages/saleor/src/utils/get-categories.ts @@ -6,17 +6,19 @@ import * as query from './queries' const getCategories = async (config: SaleorConfig): Promise => { const { data } = await config.fetch(query.CollectionMany, { variables: { - first: 100, + first: 50, }, }) return ( - data.collections?.edges?.map(({ node: { id, name, slug } }: CollectionCountableEdge) => ({ - id, - name, - slug, - path: `/${slug}`, - })) ?? [] + data?.collections?.edges?.map( + ({ node: { id, name, slug } }: CollectionCountableEdge) => ({ + id, + name, + slug, + path: `/${slug}`, + }) + ) ?? [] ) } diff --git a/packages/saleor/src/utils/get-search-variables.ts b/packages/saleor/src/utils/get-search-variables.ts index 5adf938e8..9b1909879 100644 --- a/packages/saleor/src/utils/get-search-variables.ts +++ b/packages/saleor/src/utils/get-search-variables.ts @@ -1,7 +1,12 @@ import { getSortVariables } from './get-sort-variables' import type { SearchProductsInput } from '../product/use-search' -export const getSearchVariables = ({ brandId, search, categoryId, sort }: SearchProductsInput) => { +export const getSearchVariables = ({ + brandId, + search, + categoryId, + sort, +}: SearchProductsInput) => { const sortBy = { field: 'NAME', direction: 'ASC', diff --git a/packages/saleor/src/utils/get-vendors.ts b/packages/saleor/src/utils/get-vendors.ts index caae555a8..3daf22e1d 100644 --- a/packages/saleor/src/utils/get-vendors.ts +++ b/packages/saleor/src/utils/get-vendors.ts @@ -30,7 +30,7 @@ const getVendors = async (config: SaleorConfig): Promise => { // node: { // entityId: id, // name: v, - // path: `brands/${id}`, + // path: `/${id}`, // }, // } // }) diff --git a/packages/saleor/src/utils/normalize.ts b/packages/saleor/src/utils/normalize.ts index a4ff4b52c..1e2ae31dc 100644 --- a/packages/saleor/src/utils/normalize.ts +++ b/packages/saleor/src/utils/normalize.ts @@ -1,6 +1,12 @@ import { Product } from '@vercel/commerce/types/product' -import { Product as SaleorProduct, Checkout, CheckoutLine, Money, ProductVariant } from '../../schema' +import { + Product as SaleorProduct, + Checkout, + CheckoutLine, + Money, + ProductVariant, +} from '../../schema' import type { Cart, LineItem } from '../types' @@ -19,11 +25,14 @@ const normalizeProductOptions = (options: ProductVariant[]) => { ?.map((option) => option?.attributes) .flat(1) .reduce((acc, x) => { - if (acc.find(({ displayName }: any) => displayName === x.attribute.name)) { + if ( + acc.find(({ displayName }: any) => displayName === x.attribute.name) + ) { return acc.map((opt: any) => { return opt.displayName === x.attribute.name ? { ...opt, + id: x.attribute.id, values: [ ...opt.values, ...x.values.map((value: any) => ({ @@ -37,6 +46,7 @@ const normalizeProductOptions = (options: ProductVariant[]) => { return acc.concat({ __typename: 'MultipleChoiceOption', + id: x.attribute.id, displayName: x.attribute.name, variant: 'size', values: x.values.map((value: any) => ({ @@ -54,7 +64,7 @@ const normalizeProductVariants = (variants: ProductVariant[]) => { return { id, name, - sku: sku ?? id, + ...(!!sku && { sku }), price, listPrice: price, requiresShipping: true, @@ -64,23 +74,41 @@ const normalizeProductVariants = (variants: ProductVariant[]) => { } export function normalizeProduct(productNode: SaleorProduct): Product { - const { id, name, media = [], variants, description, slug, pricing, ...rest } = productNode + const { + id, + name, + media = [], + variants, + description, + slug, + pricing, + ...rest + } = productNode const product = { id, name, vendor: '', - description: description ? JSON.parse(description)?.blocks[0]?.data.text : '', + description: description + ? JSON.parse(description)?.blocks[0]?.data.text + : '', path: `/${slug}`, slug: slug?.replace(/^\/+|\/+$/g, ''), - price: (pricing?.priceRange?.start?.net && money(pricing.priceRange.start.net)) || { + price: (pricing?.priceRange?.start?.net && + money(pricing.priceRange.start.net)) || { value: 0, currencyCode: 'USD', }, // TODO: Check nextjs-commerce bug if no images are added for a product images: media?.length ? media : [{ url: placeholderImg }], - variants: variants && variants.length > 0 ? normalizeProductVariants(variants as ProductVariant[]) : [], - options: variants && variants.length > 0 ? normalizeProductOptions(variants as ProductVariant[]) : [], + variants: + variants && variants.length > 0 + ? normalizeProductVariants(variants as ProductVariant[]) + : [], + options: + variants && variants.length > 0 + ? normalizeProductOptions(variants as ProductVariant[]) + : [], ...rest, } @@ -89,7 +117,8 @@ export function normalizeProduct(productNode: SaleorProduct): Product { export function normalizeCart(checkout: Checkout): Cart { const lines = checkout.lines as CheckoutLine[] - const lineItems: LineItem[] = lines.length > 0 ? lines?.map(normalizeLineItem) : [] + const lineItems: LineItem[] = + lines.length > 0 ? lines?.map(normalizeLineItem) : [] return { id: checkout.id, @@ -117,7 +146,7 @@ function normalizeLineItem({ id, variant, quantity }: CheckoutLine): LineItem { quantity, variant: { id: String(variant?.id), - sku: variant?.sku ?? '', + ...(variant?.sku && { sku: variant.sku }), name: variant?.name!, image: { url: variant?.media![0] ? variant?.media![0].url : placeholderImg, diff --git a/packages/saleor/src/utils/queries/collection-one.ts b/packages/saleor/src/utils/queries/collection-one.ts index c2e593f51..57d9afd1e 100644 --- a/packages/saleor/src/utils/queries/collection-one.ts +++ b/packages/saleor/src/utils/queries/collection-one.ts @@ -1,7 +1,11 @@ import * as fragment from '../fragments' export const CollectionOne = /* GraphQL */ ` - query getProductsFromCollection($categoryId: ID!, $first: Int = 100, $channel: String = "default-channel") { + query getProductsFromCollection( + $categoryId: ID! + $first: Int = 50 + $channel: String = "default-channel" + ) { collection(id: $categoryId, channel: $channel) { id products(first: $first) { diff --git a/packages/saleor/src/utils/queries/get-all-product-vendors-query.ts b/packages/saleor/src/utils/queries/get-all-product-vendors-query.ts index 7d0f01614..397566823 100644 --- a/packages/saleor/src/utils/queries/get-all-product-vendors-query.ts +++ b/packages/saleor/src/utils/queries/get-all-product-vendors-query.ts @@ -1,5 +1,5 @@ export const getAllProductVendors = /* GraphQL */ ` - query getAllProductVendors($first: Int = 250, $cursor: String) { + query getAllProductVendors($first: Int = 50, $cursor: String) { products(first: $first, after: $cursor) { pageInfo { hasNextPage diff --git a/packages/saleor/src/utils/queries/get-all-products-paths-query.ts b/packages/saleor/src/utils/queries/get-all-products-paths-query.ts index d9acb82cf..6eb1c915a 100644 --- a/packages/saleor/src/utils/queries/get-all-products-paths-query.ts +++ b/packages/saleor/src/utils/queries/get-all-products-paths-query.ts @@ -1,5 +1,9 @@ export const getAllProductsPathsQuery = /* GraphQL */ ` - query getAllProductPaths($first: Int = 100, $cursor: String, $channel: String = "default-channel") { + query getAllProductPaths( + $first: Int = 50 + $cursor: String + $channel: String = "default-channel" + ) { products(first: $first, after: $cursor, channel: $channel) { pageInfo { hasNextPage diff --git a/packages/saleor/src/utils/queries/page-many.ts b/packages/saleor/src/utils/queries/page-many.ts index 94bba696d..4e5cd8bd0 100644 --- a/packages/saleor/src/utils/queries/page-many.ts +++ b/packages/saleor/src/utils/queries/page-many.ts @@ -1,5 +1,5 @@ export const PageMany = /* GraphQL */ ` - query PageMany($first: Int = 100) { + query PageMany($first: Int = 50) { pages(first: $first) { edges { node { diff --git a/packages/saleor/src/utils/queries/product-many.ts b/packages/saleor/src/utils/queries/product-many.ts index 7e0aa9a07..cea98eb26 100644 --- a/packages/saleor/src/utils/queries/product-many.ts +++ b/packages/saleor/src/utils/queries/product-many.ts @@ -2,12 +2,17 @@ import * as fragment from '../fragments' export const ProductMany = /* GraphQL */ ` query ProductMany( - $first: Int = 100 + $first: Int = 50 $filter: ProductFilterInput $sortBy: ProductOrder $channel: String = "default-channel" ) { - products(first: $first, channel: $channel, filter: $filter, sortBy: $sortBy) { + products( + first: $first + channel: $channel + filter: $filter + sortBy: $sortBy + ) { ...ProductConnection } } diff --git a/packages/saleor/src/utils/queries/product-one-by-slug.ts b/packages/saleor/src/utils/queries/product-one-by-slug.ts index e9169f05e..669abbc06 100644 --- a/packages/saleor/src/utils/queries/product-one-by-slug.ts +++ b/packages/saleor/src/utils/queries/product-one-by-slug.ts @@ -19,6 +19,7 @@ export const ProductOneBySlug = /* GraphQL */ ` name attributes { attribute { + id name } values { diff --git a/packages/sfcc/package.json b/packages/sfcc/package.json index c04dc1909..54a43aa71 100644 --- a/packages/sfcc/package.json +++ b/packages/sfcc/package.json @@ -47,29 +47,29 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", + "@vercel/commerce": "workspace:*", "commerce-sdk": "^2.7.0" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/react": "^18.0.14", + "@types/node-fetch": "^2.6.2", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/sfcc/src/api/endpoints/cart/index.ts b/packages/sfcc/src/api/endpoints/cart/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/catalog/products/get-products.ts b/packages/sfcc/src/api/endpoints/catalog/products/get-products.ts index 3b676e5ef..6a7ea9b0b 100644 --- a/packages/sfcc/src/api/endpoints/catalog/products/get-products.ts +++ b/packages/sfcc/src/api/endpoints/catalog/products/get-products.ts @@ -2,9 +2,7 @@ import { normalizeSearchProducts } from '../../../utils/normalise-product' import { ProductsEndpoint } from '.' const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ - req, - res, - body: { search, categoryId, brandId, sort }, + body: { search, categoryId }, config, }) => { const { sdk } = config @@ -20,13 +18,15 @@ const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ limit: 20, }, }) + let products = [] let found = false if (searchResults.total) { found = true products = normalizeSearchProducts(searchResults.hits) as any[] } - res.status(200).json({ data: { products, found } }) + + return { data: { products, found } } } export default getProducts diff --git a/packages/sfcc/src/api/endpoints/checkout/index.ts b/packages/sfcc/src/api/endpoints/checkout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/checkout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/customer/address.ts b/packages/sfcc/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/customer/card.ts b/packages/sfcc/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/customer/index.ts b/packages/sfcc/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/index.ts b/packages/sfcc/src/api/endpoints/index.ts new file mode 100644 index 000000000..e848954c9 --- /dev/null +++ b/packages/sfcc/src/api/endpoints/index.ts @@ -0,0 +1,13 @@ +import type { Provider, SFCCProviderAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' + +import products from './catalog/products' + +const endpoints = { + 'catalog/products': products, +} + +export default function sfccApi(commerce: SFCCProviderAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/sfcc/src/api/endpoints/login/index.ts b/packages/sfcc/src/api/endpoints/login/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/logout/index.ts b/packages/sfcc/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/signup/index.ts b/packages/sfcc/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/endpoints/wishlist/index.tsx b/packages/sfcc/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/sfcc/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/sfcc/src/api/utils/fetch-local.ts b/packages/sfcc/src/api/utils/fetch-local.ts index 5a2bab076..89c1288d8 100644 --- a/packages/sfcc/src/api/utils/fetch-local.ts +++ b/packages/sfcc/src/api/utils/fetch-local.ts @@ -1,20 +1,23 @@ import { FetcherError } from '@vercel/commerce/utils/errors' -import type { GraphQLFetcher } from '@vercel/commerce/api' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import type { SFCCConfig } from '../index' -import fetch from './fetch' const fetchGraphqlApi: (getConfig: () => SFCCConfig) => GraphQLFetcher = (getConfig) => - async (query: string, { variables, preview } = {}, fetchOptions) => { + async ( + query: string, + { variables, preview } = {}, + options?: FetchOptions + ) => { const config = getConfig() const res = await fetch(config.commerceUrl, { - ...fetchOptions, - method: 'POST', + method: options?.method || 'POST', headers: { - ...fetchOptions?.headers, + ...options?.headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ + ...options?.body, query, variables, }), diff --git a/packages/sfcc/src/api/utils/normalise-product.ts b/packages/sfcc/src/api/utils/normalise-product.ts index b8d0e2ed4..c41dd45ab 100644 --- a/packages/sfcc/src/api/utils/normalise-product.ts +++ b/packages/sfcc/src/api/utils/normalise-product.ts @@ -1,7 +1,6 @@ import { Product as SFCCProduct, Search } from 'commerce-sdk' import type { Product, - ProductImage, ProductOption, ProductVariant, } from '@vercel/commerce/types/product' @@ -58,15 +57,16 @@ export function normalizeProduct( // TODO: use `name-ID` as a virtual slug (for search 1:1) slug: product.id, // use product ID as a slug name: product.name!, + path: `/${product.id}`, description: product.longDescription!, price: { value: product.price!, currencyCode: product.currency, }, images: product.imageGroups![0].images.map((image) => ({ - url: image.disBaseLink, - altText: image.title, - })) as ProductImage[], + url: image.disBaseLink || image.link, + alt: image.title || '', + })), variants: normaliseVariants(product.variants), options: normaliseOptions(product.variationAttributes), } @@ -78,6 +78,7 @@ export function normalizeSearchProducts( return products.map((product) => ({ id: product.productId, slug: product.productId, // use product ID as a slug + path: `/${product.productId}`, name: product.productName!, description: '', price: { @@ -87,8 +88,8 @@ export function normalizeSearchProducts( images: [ { url: product.image!.link, - altText: product.productName, - } as ProductImage, + alt: product.productName, + }, ], variants: normaliseVariants(product.variants), options: normaliseOptions(product.variationAttributes), diff --git a/packages/sfcc/src/product/use-search.tsx b/packages/sfcc/src/product/use-search.tsx index bb5e97160..83d5373c1 100644 --- a/packages/sfcc/src/product/use-search.tsx +++ b/packages/sfcc/src/product/use-search.tsx @@ -5,11 +5,10 @@ export default useSearch as UseSearch export const handler: SWRHook = { fetchOptions: { - url: '/api/catalog/products', + url: '/api/commerce/catalog/products', method: 'GET', }, fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { - console.log('search', search, categoryId, options) // Use a dummy base as we only care about the relative path const url = new URL(options.url!, 'http://a') diff --git a/packages/shopify/codegen.json b/packages/shopify/codegen.json index c82882c77..157a2dcd6 100644 --- a/packages/shopify/codegen.json +++ b/packages/shopify/codegen.json @@ -1,6 +1,6 @@ { "schema": { - "https://${NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN}/api/2022-04/graphql.json": { + "https://${NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN}/api/2022-07/graphql.json": { "headers": { "X-Shopify-Storefront-Access-Token": "${NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN}" } diff --git a/packages/shopify/package.json b/packages/shopify/package.json index 6cc45b47e..c6adbfbcf 100644 --- a/packages/shopify/package.json +++ b/packages/shopify/package.json @@ -49,35 +49,39 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", + "@vercel/commerce": "workspace:*", + "js-cookie": "^3.0.1", "lodash.debounce": "^4.0.8" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { - "@graphql-codegen/cli": "^2.3.1", + "@babel/core": "^7.20.5", + "@graphql-codegen/cli": "2.7.0", "@graphql-codegen/schema-ast": "^2.4.1", - "@graphql-codegen/typescript": "^2.4.2", - "@graphql-codegen/typescript-operations": "^2.2.2", + "@graphql-codegen/typescript": "^2.6.0", + "@graphql-codegen/typescript-operations": "^2.4.3", "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", - "@types/lodash.debounce": "^4.0.6", - "@types/node": "^17.0.8", - "@types/react": "^17.0.38", - "dotenv": "^12.0.3", - "lint-staged": "^12.1.7", - "next": "^12.0.8", - "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "@types/js-cookie": "3.0.2", + "@types/lodash.debounce": "^4.0.7", + "@types/node": "^18.0.3", + "@types/node-fetch": "2.6.2", + "@types/react": "^18.0.14", + "dotenv": "^16.0.1", + "graphql": "^16.0.0", + "lint-staged": "^13.0.3", + "next": "^12.2.1", + "prettier": "^2.7.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", - "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "taskr-swc": "workspace:*", + "typescript": "^4.3.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/shopify/schema.d.ts b/packages/shopify/schema.d.ts index 328f0ff1b..6b5dce743 100644 --- a/packages/shopify/schema.d.ts +++ b/packages/shopify/schema.d.ts @@ -1,11 +1,14 @@ export type Maybe = T | null +export type InputMaybe = Maybe export type Exact = { [K in keyof T]: T[K] } -export type MakeOptional = Omit & - { [SubKey in K]?: Maybe } -export type MakeMaybe = Omit & - { [SubKey in K]: Maybe } +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe +} +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe +} /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string @@ -13,31 +16,26 @@ export type Scalars = { Boolean: boolean Int: number Float: number - /** An ISO-8601 encoded UTC date time string. Example value: `"2019-07-03T20:47:55Z"`. */ DateTime: any - /** A signed decimal number, which supports arbitrary precision and is serialized as a string. Example value: `"29.99"`. */ Decimal: any - /** A string containing HTML code. Example value: `"

Grey cotton knit sweater.

"`. */ HTML: any - /** A monetary value string. Example value: `"100.57"`. */ + JSON: any Money: any - /** - * An RFC 3986 and RFC 3987 compliant URI string. - * - * Example value: `"https://johns-apparel.myshopify.com"`. - * - */ URL: any } -/** A version of the API. */ +/** + * A version of the API, as defined by [Shopify API versioning](https://shopify.dev/api/usage/versioning). + * Versions are commonly referred to by their handle (for example, `2021-10`). + * + */ export type ApiVersion = { __typename?: 'ApiVersion' /** The human-readable name of the version. */ displayName: Scalars['String'] /** The unique identifier of an ApiVersion. All supported API versions have a date-based (YYYY-MM) or `unstable` handle. */ handle: Scalars['String'] - /** Whether the version is actively supported by Shopify. Supported API versions are guaranteed to be stable. Unsupported API versions include unstable, release candidate, and end-of-life versions that are marked as unsupported. For more information, refer to [Versioning](https://shopify.dev/concepts/about-apis/versioning). */ + /** Whether the version is actively supported by Shopify. Supported API versions are guaranteed to be stable. Unsupported API versions include unstable, release candidate, and end-of-life versions that are marked as unsupported. For more information, refer to [Versioning](https://shopify.dev/api/usage/versioning). */ supported: Scalars['Boolean'] } @@ -46,19 +44,19 @@ export type AppliedGiftCard = Node & { __typename?: 'AppliedGiftCard' /** * The amount that was taken from the gift card by applying it. - * @deprecated Use `amountUsedV2` instead + * @deprecated Use `amountUsedV2` instead. */ amountUsed: Scalars['Money'] /** The amount that was taken from the gift card by applying it. */ amountUsedV2: MoneyV2 /** * The amount left on the gift card. - * @deprecated Use `balanceV2` instead + * @deprecated Use `balanceV2` instead. */ balance: Scalars['Money'] /** The amount left on the gift card. */ balanceV2: MoneyV2 - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The last characters of the gift card. */ lastCharacters: Scalars['String'] @@ -67,70 +65,85 @@ export type AppliedGiftCard = Node & { } /** An article in an online store blog. */ -export type Article = Node & { - __typename?: 'Article' - /** - * The article's author. - * @deprecated Use `authorV2` instead - */ - author: ArticleAuthor - /** The article's author. */ - authorV2?: Maybe - /** The blog that the article belongs to. */ - blog: Blog - /** List of comments posted on the article. */ - comments: CommentConnection - /** Stripped content of the article, single line with HTML tags removed. */ - content: Scalars['String'] - /** The content of the article, complete with HTML formatting. */ - contentHtml: Scalars['HTML'] - /** Stripped excerpt of the article, single line with HTML tags removed. */ - excerpt?: Maybe - /** The excerpt of the article, complete with HTML formatting. */ - excerptHtml?: Maybe - /** A human-friendly unique string for the Article automatically generated from its title. */ - handle: Scalars['String'] - /** Globally unique identifier. */ - id: Scalars['ID'] - /** The image associated with the article. */ - image?: Maybe - /** The date and time when the article was published. */ - publishedAt: Scalars['DateTime'] - /** The article’s SEO information. */ - seo?: Maybe - /** A categorization that a article can be tagged with. */ - tags: Array - /** The article’s name. */ - title: Scalars['String'] - /** The url pointing to the article accessible from the web. */ - url: Scalars['URL'] -} +export type Article = HasMetafields & + Node & + OnlineStorePublishable & { + __typename?: 'Article' + /** + * The article's author. + * @deprecated Use `authorV2` instead. + */ + author: ArticleAuthor + /** The article's author. */ + authorV2?: Maybe + /** The blog that the article belongs to. */ + blog: Blog + /** List of comments posted on the article. */ + comments: CommentConnection + /** Stripped content of the article, single line with HTML tags removed. */ + content: Scalars['String'] + /** The content of the article, complete with HTML formatting. */ + contentHtml: Scalars['HTML'] + /** Stripped excerpt of the article, single line with HTML tags removed. */ + excerpt?: Maybe + /** The excerpt of the article, complete with HTML formatting. */ + excerptHtml?: Maybe + /** + * A human-friendly unique string for the Article automatically generated from its title. + * + */ + handle: Scalars['String'] + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The image associated with the article. */ + image?: Maybe + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ + onlineStoreUrl?: Maybe + /** The date and time when the article was published. */ + publishedAt: Scalars['DateTime'] + /** The article’s SEO information. */ + seo?: Maybe + /** A categorization that a article can be tagged with. */ + tags: Array + /** The article’s name. */ + title: Scalars['String'] + } /** An article in an online store blog. */ export type ArticleCommentsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** An article in an online store blog. */ export type ArticleContentArgs = { - truncateAt?: Maybe + truncateAt?: InputMaybe } /** An article in an online store blog. */ export type ArticleExcerptArgs = { - truncateAt?: Maybe + truncateAt?: InputMaybe } /** An article in an online store blog. */ -export type ArticleImageArgs = { - maxWidth?: Maybe - maxHeight?: Maybe - crop?: Maybe - scale?: Maybe +export type ArticleMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] +} + +/** An article in an online store blog. */ +export type ArticleMetafieldsArgs = { + identifiers: Array } /** The author of an article. */ @@ -148,16 +161,24 @@ export type ArticleAuthor = { name: Scalars['String'] } -/** An auto-generated type for paginating through multiple Articles. */ +/** + * An auto-generated type for paginating through multiple Articles. + * + */ export type ArticleConnection = { __typename?: 'ArticleConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in ArticleEdge. */ + nodes: Array
/** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Article and a cursor during pagination. */ +/** + * An auto-generated type which holds one Article and a cursor during pagination. + * + */ export type ArticleEdge = { __typename?: 'ArticleEdge' /** A cursor for use in pagination. */ @@ -168,24 +189,24 @@ export type ArticleEdge = { /** The set of valid sort keys for the Article query. */ export enum ArticleSortKeys { - /** Sort by the `title` value. */ - Title = 'TITLE', - /** Sort by the `blog_title` value. */ - BlogTitle = 'BLOG_TITLE', /** Sort by the `author` value. */ Author = 'AUTHOR', - /** Sort by the `updated_at` value. */ - UpdatedAt = 'UPDATED_AT', - /** Sort by the `published_at` value. */ - PublishedAt = 'PUBLISHED_AT', + /** Sort by the `blog_title` value. */ + BlogTitle = 'BLOG_TITLE', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `published_at` value. */ + PublishedAt = 'PUBLISHED_AT', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `title` value. */ + Title = 'TITLE', + /** Sort by the `updated_at` value. */ + UpdatedAt = 'UPDATED_AT', } /** Represents a generic custom attribute. */ @@ -205,7 +226,10 @@ export type AttributeInput = { value: Scalars['String'] } -/** Automatic discount applications capture the intentions of a discount that was automatically applied. */ +/** + * Automatic discount applications capture the intentions of a discount that was automatically applied. + * + */ export type AutomaticDiscountApplication = DiscountApplication & { __typename?: 'AutomaticDiscountApplication' /** The method by which the discount's value is allocated to its entitled items. */ @@ -227,6 +251,7 @@ export type AvailableShippingRates = { * Whether or not the shipping rates are ready. * The `shippingRates` field is `null` when this value is `false`. * This field should be polled until its value becomes `true`. + * */ ready: Scalars['Boolean'] /** The fetched shipping rates. `null` until the `ready` field is `true`. */ @@ -234,25 +259,37 @@ export type AvailableShippingRates = { } /** An online store blog. */ -export type Blog = Node & { - __typename?: 'Blog' - /** Find an article by its handle. */ - articleByHandle?: Maybe
- /** List of the blog's articles. */ - articles: ArticleConnection - /** The authors who have contributed to the blog. */ - authors: Array - /** A human-friendly unique string for the Blog automatically generated from its title. */ - handle: Scalars['String'] - /** Globally unique identifier. */ - id: Scalars['ID'] - /** The blog's SEO information. */ - seo?: Maybe - /** The blogs’s title. */ - title: Scalars['String'] - /** The url pointing to the blog accessible from the web. */ - url: Scalars['URL'] -} +export type Blog = HasMetafields & + Node & + OnlineStorePublishable & { + __typename?: 'Blog' + /** Find an article by its handle. */ + articleByHandle?: Maybe
+ /** List of the blog's articles. */ + articles: ArticleConnection + /** The authors who have contributed to the blog. */ + authors: Array + /** + * A human-friendly unique string for the Blog automatically generated from its title. + * + */ + handle: Scalars['String'] + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ + onlineStoreUrl?: Maybe + /** The blog's SEO information. */ + seo?: Maybe + /** The blogs’s title. */ + title: Scalars['String'] + } /** An online store blog. */ export type BlogArticleByHandleArgs = { @@ -261,25 +298,44 @@ export type BlogArticleByHandleArgs = { /** An online store blog. */ export type BlogArticlesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } -/** An auto-generated type for paginating through multiple Blogs. */ +/** An online store blog. */ +export type BlogMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] +} + +/** An online store blog. */ +export type BlogMetafieldsArgs = { + identifiers: Array +} + +/** + * An auto-generated type for paginating through multiple Blogs. + * + */ export type BlogConnection = { __typename?: 'BlogConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in BlogEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Blog and a cursor during pagination. */ +/** + * An auto-generated type which holds one Blog and a cursor during pagination. + * + */ export type BlogEdge = { __typename?: 'BlogEdge' /** A cursor for use in pagination. */ @@ -292,32 +348,503 @@ export type BlogEdge = { export enum BlogSortKeys { /** Sort by the `handle` value. */ Handle = 'HANDLE', - /** Sort by the `title` value. */ - Title = 'TITLE', /** Sort by the `id` value. */ Id = 'ID', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `title` value. */ + Title = 'TITLE', } /** Card brand, such as Visa or Mastercard, which can be used for payments. */ export enum CardBrand { - /** Visa. */ - Visa = 'VISA', - /** Mastercard. */ - Mastercard = 'MASTERCARD', - /** Discover. */ - Discover = 'DISCOVER', /** American Express. */ AmericanExpress = 'AMERICAN_EXPRESS', /** Diners Club. */ DinersClub = 'DINERS_CLUB', + /** Discover. */ + Discover = 'DISCOVER', /** JCB. */ Jcb = 'JCB', + /** Mastercard. */ + Mastercard = 'MASTERCARD', + /** Visa. */ + Visa = 'VISA', +} + +/** A cart represents the merchandise that a buyer intends to purchase, and the estimated cost associated with the cart. To learn how to interact with a cart during a customer's session, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). */ +export type Cart = Node & { + __typename?: 'Cart' + /** An attribute associated with the cart. */ + attribute?: Maybe + /** The attributes associated with the cart. Attributes are represented as key-value pairs. */ + attributes: Array + /** Information about the buyer that is interacting with the cart. */ + buyerIdentity: CartBuyerIdentity + /** The URL of the checkout for the cart. */ + checkoutUrl: Scalars['URL'] + /** The estimated costs that the buyer will pay at checkout. The costs are subject to change and changes will be reflected at checkout. The `cost` field uses the `buyerIdentity` field to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). */ + cost: CartCost + /** The date and time when the cart was created. */ + createdAt: Scalars['DateTime'] + /** The delivery groups available for the cart, based on the default address of the logged-in customer. */ + deliveryGroups: CartDeliveryGroupConnection + /** The discounts that have been applied to the entire cart. */ + discountAllocations: Array + /** + * The case-insensitive discount codes that the customer added at checkout. + * + */ + discountCodes: Array + /** + * The estimated costs that the buyer will pay at checkout. The estimated costs are subject to change and changes will be reflected at checkout. The `estimatedCost` field uses the `buyerIdentity` field to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). + * @deprecated Use `cost` instead. + */ + estimatedCost: CartEstimatedCost + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** A list of lines containing information about the items the customer intends to purchase. */ + lines: CartLineConnection + /** A note that is associated with the cart. For example, the note can be a personalized message to the buyer. */ + note?: Maybe + /** The total number of items in the cart. */ + totalQuantity: Scalars['Int'] + /** The date and time when the cart was updated. */ + updatedAt: Scalars['DateTime'] +} + +/** A cart represents the merchandise that a buyer intends to purchase, and the estimated cost associated with the cart. To learn how to interact with a cart during a customer's session, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). */ +export type CartAttributeArgs = { + key: Scalars['String'] +} + +/** A cart represents the merchandise that a buyer intends to purchase, and the estimated cost associated with the cart. To learn how to interact with a cart during a customer's session, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). */ +export type CartDeliveryGroupsArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** A cart represents the merchandise that a buyer intends to purchase, and the estimated cost associated with the cart. To learn how to interact with a cart during a customer's session, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). */ +export type CartLinesArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** Return type for `cartAttributesUpdate` mutation. */ +export type CartAttributesUpdatePayload = { + __typename?: 'CartAttributesUpdatePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** The discounts automatically applied to the cart line based on prerequisites that have been met. */ +export type CartAutomaticDiscountAllocation = CartDiscountAllocation & { + __typename?: 'CartAutomaticDiscountAllocation' + /** The discounted amount that has been applied to the cart line. */ + discountedAmount: MoneyV2 + /** The title of the allocated discount. */ + title: Scalars['String'] +} + +/** Represents information about the buyer that is interacting with the cart. */ +export type CartBuyerIdentity = { + __typename?: 'CartBuyerIdentity' + /** The country where the buyer is located. */ + countryCode?: Maybe + /** The customer account associated with the cart. */ + customer?: Maybe + /** The email address of the buyer that is interacting with the cart. */ + email?: Maybe + /** The phone number of the buyer that is interacting with the cart. */ + phone?: Maybe +} + +/** + * Specifies the input fields to update the buyer information associated with a cart. + * Buyer identity is used to determine + * [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout) + * and should match the customer's shipping address. + * + */ +export type CartBuyerIdentityInput = { + /** The country where the buyer is located. */ + countryCode?: InputMaybe + /** The access token used to identify the customer associated with the cart. */ + customerAccessToken?: InputMaybe + /** The email address of the buyer that is interacting with the cart. */ + email?: InputMaybe + /** The phone number of the buyer that is interacting with the cart. */ + phone?: InputMaybe +} + +/** Return type for `cartBuyerIdentityUpdate` mutation. */ +export type CartBuyerIdentityUpdatePayload = { + __typename?: 'CartBuyerIdentityUpdatePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** The discount that has been applied to the cart line using a discount code. */ +export type CartCodeDiscountAllocation = CartDiscountAllocation & { + __typename?: 'CartCodeDiscountAllocation' + /** The code used to apply the discount. */ + code: Scalars['String'] + /** The discounted amount that has been applied to the cart line. */ + discountedAmount: MoneyV2 +} + +/** + * The costs that the buyer will pay at checkout. + * It uses [`CartBuyerIdentity`](https://shopify.dev/api/storefront/reference/cart/cartbuyeridentity) to determine + * [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). + * + */ +export type CartCost = { + __typename?: 'CartCost' + /** The estimated amount, before taxes and discounts, for the customer to pay at checkout. The checkout charge amount doesn't include any deferred payments that'll be paid at a later date. If the cart has no deferred payments, then the checkout charge amount is equivalent to `subtotalAmount`. */ + checkoutChargeAmount: MoneyV2 + /** The amount, before taxes and cart-level discounts, for the customer to pay. */ + subtotalAmount: MoneyV2 + /** Whether the subtotal amount is estimated. */ + subtotalAmountEstimated: Scalars['Boolean'] + /** The total amount for the customer to pay. */ + totalAmount: MoneyV2 + /** Whether the total amount is estimated. */ + totalAmountEstimated: Scalars['Boolean'] + /** The duty amount for the customer to pay at checkout. */ + totalDutyAmount?: Maybe + /** Whether the total duty amount is estimated. */ + totalDutyAmountEstimated: Scalars['Boolean'] + /** The tax amount for the customer to pay at checkout. */ + totalTaxAmount?: Maybe + /** Whether the total tax amount is estimated. */ + totalTaxAmountEstimated: Scalars['Boolean'] +} + +/** Return type for `cartCreate` mutation. */ +export type CartCreatePayload = { + __typename?: 'CartCreatePayload' + /** The new cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** The discounts automatically applied to the cart line based on prerequisites that have been met. */ +export type CartCustomDiscountAllocation = CartDiscountAllocation & { + __typename?: 'CartCustomDiscountAllocation' + /** The discounted amount that has been applied to the cart line. */ + discountedAmount: MoneyV2 + /** The title of the allocated discount. */ + title: Scalars['String'] +} + +/** Information about the options available for one or more line items to be delivered to a specific address. */ +export type CartDeliveryGroup = { + __typename?: 'CartDeliveryGroup' + /** A list of cart lines for the delivery group. */ + cartLines: CartLineConnection + /** The destination address for the delivery group. */ + deliveryAddress: MailingAddress + /** The delivery options available for the delivery group. */ + deliveryOptions: Array + /** The ID for the delivery group. */ + id: Scalars['ID'] +} + +/** Information about the options available for one or more line items to be delivered to a specific address. */ +export type CartDeliveryGroupCartLinesArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** + * An auto-generated type for paginating through multiple CartDeliveryGroups. + * + */ +export type CartDeliveryGroupConnection = { + __typename?: 'CartDeliveryGroupConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in CartDeliveryGroupEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one CartDeliveryGroup and a cursor during pagination. + * + */ +export type CartDeliveryGroupEdge = { + __typename?: 'CartDeliveryGroupEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of CartDeliveryGroupEdge. */ + node: CartDeliveryGroup +} + +/** Information about a delivery option. */ +export type CartDeliveryOption = { + __typename?: 'CartDeliveryOption' + /** The code of the delivery option. */ + code?: Maybe + /** The method for the delivery option. */ + deliveryMethodType: DeliveryMethodType + /** The description of the delivery option. */ + description?: Maybe + /** The estimated cost for the delivery option. */ + estimatedCost: MoneyV2 + /** The title of the delivery option. */ + title?: Maybe +} + +/** The discounts that have been applied to the cart line. */ +export type CartDiscountAllocation = { + /** The discounted amount that has been applied to the cart line. */ + discountedAmount: MoneyV2 +} + +/** The discount codes applied to the cart. */ +export type CartDiscountCode = { + __typename?: 'CartDiscountCode' + /** Whether the discount code is applicable to the cart's current contents. */ + applicable: Scalars['Boolean'] + /** The code for the discount. */ + code: Scalars['String'] +} + +/** Return type for `cartDiscountCodesUpdate` mutation. */ +export type CartDiscountCodesUpdatePayload = { + __typename?: 'CartDiscountCodesUpdatePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** Possible error codes that can be returned by `CartUserError`. */ +export enum CartErrorCode { + /** The input value is invalid. */ + Invalid = 'INVALID', + /** Merchandise line was not found in cart. */ + InvalidMerchandiseLine = 'INVALID_MERCHANDISE_LINE', + /** The input value should be less than the maximum value allowed. */ + LessThan = 'LESS_THAN', + /** Missing discount code. */ + MissingDiscountCode = 'MISSING_DISCOUNT_CODE', + /** Missing note. */ + MissingNote = 'MISSING_NOTE', +} + +/** + * The estimated costs that the buyer will pay at checkout. + * It uses [`CartBuyerIdentity`](https://shopify.dev/api/storefront/reference/cart/cartbuyeridentity) to determine + * [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). + * + */ +export type CartEstimatedCost = { + __typename?: 'CartEstimatedCost' + /** The estimated amount, before taxes and discounts, for the customer to pay at checkout. The checkout charge amount doesn't include any deferred payments that'll be paid at a later date. If the cart has no deferred payments, then the checkout charge amount is equivalent to`subtotal_amount`. */ + checkoutChargeAmount: MoneyV2 + /** The estimated amount, before taxes and discounts, for the customer to pay. */ + subtotalAmount: MoneyV2 + /** The estimated total amount for the customer to pay. */ + totalAmount: MoneyV2 + /** The estimated duty amount for the customer to pay at checkout. */ + totalDutyAmount?: Maybe + /** The estimated tax amount for the customer to pay at checkout. */ + totalTaxAmount?: Maybe +} + +/** Specifies the input fields to create a cart. */ +export type CartInput = { + /** An array of key-value pairs that contains additional information about the cart. */ + attributes?: InputMaybe> + /** The customer associated with the cart. Used to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout). Buyer identity should match the customer's shipping address. */ + buyerIdentity?: InputMaybe + /** + * The case-insensitive discount codes that the customer added at checkout. + * + */ + discountCodes?: InputMaybe> + /** A list of merchandise lines to add to the cart. */ + lines?: InputMaybe> + /** A note that is associated with the cart. For example, the note can be a personalized message to the buyer. */ + note?: InputMaybe +} + +/** Represents information about the merchandise in the cart. */ +export type CartLine = Node & { + __typename?: 'CartLine' + /** An attribute associated with the cart line. */ + attribute?: Maybe + /** The attributes associated with the cart line. Attributes are represented as key-value pairs. */ + attributes: Array + /** The cost of the merchandise that the buyer will pay for at checkout. The costs are subject to change and changes will be reflected at checkout. */ + cost: CartLineCost + /** The discounts that have been applied to the cart line. */ + discountAllocations: Array + /** + * The estimated cost of the merchandise that the buyer will pay for at checkout. The estimated costs are subject to change and changes will be reflected at checkout. + * @deprecated Use `cost` instead. + */ + estimatedCost: CartLineEstimatedCost + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The merchandise that the buyer intends to purchase. */ + merchandise: Merchandise + /** The quantity of the merchandise that the customer intends to purchase. */ + quantity: Scalars['Int'] + /** The selling plan associated with the cart line and the effect that each selling plan has on variants when they're purchased. */ + sellingPlanAllocation?: Maybe +} + +/** Represents information about the merchandise in the cart. */ +export type CartLineAttributeArgs = { + key: Scalars['String'] +} + +/** + * An auto-generated type for paginating through multiple CartLines. + * + */ +export type CartLineConnection = { + __typename?: 'CartLineConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in CartLineEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** The cost of the merchandise line that the buyer will pay at checkout. */ +export type CartLineCost = { + __typename?: 'CartLineCost' + /** The amount of the merchandise line. */ + amountPerQuantity: MoneyV2 + /** The compare at amount of the merchandise line. */ + compareAtAmountPerQuantity?: Maybe + /** The cost of the merchandise line before line-level discounts. */ + subtotalAmount: MoneyV2 + /** The total cost of the merchandise line. */ + totalAmount: MoneyV2 +} + +/** + * An auto-generated type which holds one CartLine and a cursor during pagination. + * + */ +export type CartLineEdge = { + __typename?: 'CartLineEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of CartLineEdge. */ + node: CartLine +} + +/** The estimated cost of the merchandise line that the buyer will pay at checkout. */ +export type CartLineEstimatedCost = { + __typename?: 'CartLineEstimatedCost' + /** The amount of the merchandise line. */ + amount: MoneyV2 + /** The compare at amount of the merchandise line. */ + compareAtAmount?: Maybe + /** The estimated cost of the merchandise line before discounts. */ + subtotalAmount: MoneyV2 + /** The estimated total cost of the merchandise line. */ + totalAmount: MoneyV2 +} + +/** Specifies the input fields to create a merchandise line on a cart. */ +export type CartLineInput = { + /** An array of key-value pairs that contains additional information about the merchandise line. */ + attributes?: InputMaybe> + /** The identifier of the merchandise that the buyer intends to purchase. */ + merchandiseId: Scalars['ID'] + /** The quantity of the merchandise. */ + quantity?: InputMaybe + /** The identifier of the selling plan that the merchandise is being purchased with. */ + sellingPlanId?: InputMaybe +} + +/** Specifies the input fields to update a line item on a cart. */ +export type CartLineUpdateInput = { + /** An array of key-value pairs that contains additional information about the merchandise line. */ + attributes?: InputMaybe> + /** The identifier of the merchandise line. */ + id: Scalars['ID'] + /** The identifier of the merchandise for the line item. */ + merchandiseId?: InputMaybe + /** The quantity of the line item. */ + quantity?: InputMaybe + /** The identifier of the selling plan that the merchandise is being purchased with. */ + sellingPlanId?: InputMaybe +} + +/** Return type for `cartLinesAdd` mutation. */ +export type CartLinesAddPayload = { + __typename?: 'CartLinesAddPayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** Return type for `cartLinesRemove` mutation. */ +export type CartLinesRemovePayload = { + __typename?: 'CartLinesRemovePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** Return type for `cartLinesUpdate` mutation. */ +export type CartLinesUpdatePayload = { + __typename?: 'CartLinesUpdatePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** Return type for `cartNoteUpdate` mutation. */ +export type CartNoteUpdatePayload = { + __typename?: 'CartNoteUpdatePayload' + /** The updated cart. */ + cart?: Maybe + /** The list of errors that occurred from executing the mutation. */ + userErrors: Array +} + +/** Represents an error that happens during execution of a cart mutation. */ +export type CartUserError = DisplayableError & { + __typename?: 'CartUserError' + /** The error code. */ + code?: Maybe + /** The path to the input field that caused the error. */ + field?: Maybe> + /** The error message. */ + message: Scalars['String'] } /** A container for all the information required to checkout items and pay. */ @@ -329,26 +856,24 @@ export type Checkout = Node & { * The available shipping rates for this Checkout. * Should only be used when checkout `requiresShipping` is `true` and * the shipping address is valid. + * */ availableShippingRates?: Maybe + /** The identity of the customer associated with the checkout. */ + buyerIdentity: CheckoutBuyerIdentity /** The date and time when the checkout was completed. */ completedAt?: Maybe /** The date and time when the checkout was created. */ createdAt: Scalars['DateTime'] - /** The currency code for the Checkout. */ + /** The currency code for the checkout. */ currencyCode: CurrencyCode /** A list of extra information that is added to the checkout. */ customAttributes: Array - /** - * The customer associated with the checkout. - * @deprecated This field will always return null. If you have an authentication token for the customer, you can use the `customer` field on the query root to retrieve it. - */ - customer?: Maybe /** Discounts that have been applied on the checkout. */ discountApplications: DiscountApplicationConnection /** The email attached to this checkout. */ email?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** A list of line item objects, each one containing information about an item in the checkout. */ lineItems: CheckoutLineItemConnection @@ -362,47 +887,53 @@ export type Checkout = Node & { orderStatusUrl?: Maybe /** * The amount left to be paid. This is equal to the cost of the line items, taxes and shipping minus discounts and gift cards. - * @deprecated Use `paymentDueV2` instead + * @deprecated Use `paymentDueV2` instead. */ paymentDue: Scalars['Money'] - /** The amount left to be paid. This is equal to the cost of the line items, duties, taxes and shipping minus discounts and gift cards. */ + /** The amount left to be paid. This is equal to the cost of the line items, duties, taxes, and shipping, minus discounts and gift cards. */ paymentDueV2: MoneyV2 /** * Whether or not the Checkout is ready and can be completed. Checkouts may * have asynchronous operations that can take time to finish. If you want * to complete a checkout or ensure all the fields are populated and up to * date, polling is required until the value is true. + * */ ready: Scalars['Boolean'] /** States whether or not the fulfillment requires shipping. */ requiresShipping: Scalars['Boolean'] /** The shipping address to where the line items will be shipped. */ shippingAddress?: Maybe - /** The discounts that have been allocated onto the shipping line by discount applications. */ + /** + * The discounts that have been allocated onto the shipping line by discount applications. + * + */ shippingDiscountAllocations: Array /** Once a shipping rate is selected by the customer it is transitioned to a `shipping_line` object. */ shippingLine?: Maybe /** * Price of the checkout before shipping and taxes. - * @deprecated Use `subtotalPriceV2` instead + * @deprecated Use `subtotalPriceV2` instead. */ subtotalPrice: Scalars['Money'] - /** Price of the checkout before duties, shipping and taxes. */ + /** The price at checkout before duties, shipping, and taxes. */ subtotalPriceV2: MoneyV2 - /** Specifies if the Checkout is tax exempt. */ + /** Whether the checkout is tax exempt. */ taxExempt: Scalars['Boolean'] - /** Specifies if taxes are included in the line item and shipping line prices. */ + /** Whether taxes are included in the line item and shipping line prices. */ taxesIncluded: Scalars['Boolean'] + /** The sum of all the duties applied to the line items in the checkout. */ + totalDuties?: Maybe /** * The sum of all the prices of all the items in the checkout, taxes and discounts included. - * @deprecated Use `totalPriceV2` instead + * @deprecated Use `totalPriceV2` instead. */ totalPrice: Scalars['Money'] - /** The sum of all the prices of all the items in the checkout, duties, taxes and discounts included. */ + /** The sum of all the prices of all the items in the checkout, including duties, taxes, and discounts. */ totalPriceV2: MoneyV2 /** * The sum of all the taxes applied to the line items and shipping lines in the checkout. - * @deprecated Use `totalTaxV2` instead + * @deprecated Use `totalTaxV2` instead. */ totalTax: Scalars['Money'] /** The sum of all the taxes applied to the line items and shipping lines in the checkout. */ @@ -415,62 +946,36 @@ export type Checkout = Node & { /** A container for all the information required to checkout items and pay. */ export type CheckoutDiscountApplicationsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** A container for all the information required to checkout items and pay. */ export type CheckoutLineItemsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe -} - -/** Specifies the fields required to update a checkout's attributes. */ -export type CheckoutAttributesUpdateInput = { - /** The text of an optional note that a shop owner can attach to the checkout. */ - note?: Maybe - /** A list of extra information that is added to the checkout. */ - customAttributes?: Maybe> - /** - * Allows setting partial addresses on a Checkout, skipping the full validation of attributes. - * The required attributes are city, province, and country. - * Full validation of the addresses is still done at complete time. - */ - allowPartialAddresses?: Maybe -} - -/** Return type for `checkoutAttributesUpdate` mutation. */ -export type CheckoutAttributesUpdatePayload = { - __typename?: 'CheckoutAttributesUpdatePayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** Specifies the fields required to update a checkout's attributes. */ export type CheckoutAttributesUpdateV2Input = { - /** The text of an optional note that a shop owner can attach to the checkout. */ - note?: Maybe - /** A list of extra information that is added to the checkout. */ - customAttributes?: Maybe> /** * Allows setting partial addresses on a Checkout, skipping the full validation of attributes. * The required attributes are city, province, and country. - * Full validation of the addresses is still done at complete time. + * Full validation of the addresses is still done at completion time. Defaults to `false` with + * each operation. + * */ - allowPartialAddresses?: Maybe + allowPartialAddresses?: InputMaybe + /** A list of extra information that is added to the checkout. */ + customAttributes?: InputMaybe> + /** The text of an optional note that a shop owner can attach to the checkout. */ + note?: InputMaybe } /** Return type for `checkoutAttributesUpdateV2` mutation. */ @@ -478,41 +983,43 @@ export type CheckoutAttributesUpdateV2Payload = { __typename?: 'CheckoutAttributesUpdateV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } +/** The identity of the customer associated with the checkout. */ +export type CheckoutBuyerIdentity = { + __typename?: 'CheckoutBuyerIdentity' + /** The country code for the checkout. For example, `CA`. */ + countryCode?: Maybe +} + +/** Specifies the identity of the customer associated with the checkout. */ +export type CheckoutBuyerIdentityInput = { + /** + * The country code of one of the shop's + * [enabled countries](https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/setup). + * For example, `CA`. Including this field creates a checkout in the specified country's currency. + * + */ + countryCode: CountryCode +} + /** Return type for `checkoutCompleteFree` mutation. */ export type CheckoutCompleteFreePayload = { __typename?: 'CheckoutCompleteFreePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutCompleteWithCreditCard` mutation. */ -export type CheckoutCompleteWithCreditCardPayload = { - __typename?: 'CheckoutCompleteWithCreditCardPayload' - /** The checkout on which the payment was applied. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** A representation of the attempted payment. */ - payment?: Maybe - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -522,45 +1029,13 @@ export type CheckoutCompleteWithCreditCardV2Payload = { __typename?: 'CheckoutCompleteWithCreditCardV2Payload' /** The checkout on which the payment was applied. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** A representation of the attempted payment. */ payment?: Maybe /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutCompleteWithTokenizedPayment` mutation. */ -export type CheckoutCompleteWithTokenizedPaymentPayload = { - __typename?: 'CheckoutCompleteWithTokenizedPaymentPayload' - /** The checkout on which the payment was applied. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** A representation of the attempted payment. */ - payment?: Maybe - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutCompleteWithTokenizedPaymentV2` mutation. */ -export type CheckoutCompleteWithTokenizedPaymentV2Payload = { - __typename?: 'CheckoutCompleteWithTokenizedPaymentV2Payload' - /** The checkout on which the payment was applied. */ - checkout?: Maybe - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** A representation of the attempted payment. */ - payment?: Maybe - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -570,41 +1045,38 @@ export type CheckoutCompleteWithTokenizedPaymentV3Payload = { __typename?: 'CheckoutCompleteWithTokenizedPaymentV3Payload' /** The checkout on which the payment was applied. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** A representation of the attempted payment. */ payment?: Maybe /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } /** Specifies the fields required to create a checkout. */ export type CheckoutCreateInput = { - /** The email with which the customer wants to checkout. */ - email?: Maybe - /** A list of line item objects, each one containing information about an item in the checkout. */ - lineItems?: Maybe> - /** The shipping address to where the line items will be shipped. */ - shippingAddress?: Maybe - /** The text of an optional note that a shop owner can attach to the checkout. */ - note?: Maybe - /** A list of extra information that is added to the checkout. */ - customAttributes?: Maybe> /** * Allows setting partial addresses on a Checkout, skipping the full validation of attributes. * The required attributes are city, province, and country. - * Full validation of addresses is still done at complete time. + * Full validation of addresses is still done at completion time. Defaults to `null`. + * */ - allowPartialAddresses?: Maybe - /** - * The three-letter currency code of one of the shop's enabled presentment currencies. - * Including this field creates a checkout in the specified currency. By default, new - * checkouts are created in the shop's primary currency. - */ - presentmentCurrencyCode?: Maybe + allowPartialAddresses?: InputMaybe + /** The identity of the customer associated with the checkout. */ + buyerIdentity?: InputMaybe + /** A list of extra information that is added to the checkout. */ + customAttributes?: InputMaybe> + /** The email with which the customer wants to checkout. */ + email?: InputMaybe + /** A list of line item objects, each one containing information about an item in the checkout. */ + lineItems?: InputMaybe> + /** The text of an optional note that a shop owner can attach to the checkout. */ + note?: InputMaybe + /** The shipping address to where the line items will be shipped. */ + shippingAddress?: InputMaybe } /** Return type for `checkoutCreate` mutation. */ @@ -612,52 +1084,29 @@ export type CheckoutCreatePayload = { __typename?: 'CheckoutCreatePayload' /** The new checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array + /** The checkout queue token. Available only to selected stores. */ + queueToken?: Maybe /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } -/** Return type for `checkoutCustomerAssociate` mutation. */ -export type CheckoutCustomerAssociatePayload = { - __typename?: 'CheckoutCustomerAssociatePayload' - /** The updated checkout object. */ - checkout: Checkout - /** The associated customer object. */ - customer?: Maybe - /** List of errors that occurred executing the mutation. */ - userErrors: Array -} - /** Return type for `checkoutCustomerAssociateV2` mutation. */ export type CheckoutCustomerAssociateV2Payload = { __typename?: 'CheckoutCustomerAssociateV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** The associated customer object. */ customer?: Maybe /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutCustomerDisassociate` mutation. */ -export type CheckoutCustomerDisassociatePayload = { - __typename?: 'CheckoutCustomerDisassociatePayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -667,25 +1116,11 @@ export type CheckoutCustomerDisassociateV2Payload = { __typename?: 'CheckoutCustomerDisassociateV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutDiscountCodeApply` mutation. */ -export type CheckoutDiscountCodeApplyPayload = { - __typename?: 'CheckoutDiscountCodeApplyPayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -695,11 +1130,11 @@ export type CheckoutDiscountCodeApplyV2Payload = { __typename?: 'CheckoutDiscountCodeApplyV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -709,25 +1144,11 @@ export type CheckoutDiscountCodeRemovePayload = { __typename?: 'CheckoutDiscountCodeRemovePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutEmailUpdate` mutation. */ -export type CheckoutEmailUpdatePayload = { - __typename?: 'CheckoutEmailUpdatePayload' - /** The checkout object with the updated email. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -737,121 +1158,105 @@ export type CheckoutEmailUpdateV2Payload = { __typename?: 'CheckoutEmailUpdateV2Payload' /** The checkout object with the updated email. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } -/** Possible error codes that could be returned by CheckoutUserError. */ +/** Possible error codes that can be returned by `CheckoutUserError`. */ export enum CheckoutErrorCode { - /** Input value is blank. */ - Blank = 'BLANK', - /** Input value is invalid. */ - Invalid = 'INVALID', - /** Input value is too long. */ - TooLong = 'TOO_LONG', - /** Input value is not present. */ - Present = 'PRESENT', - /** Input value should be less than maximum allowed value. */ - LessThan = 'LESS_THAN', - /** Input value should be greater than or equal to minimum allowed value. */ - GreaterThanOrEqualTo = 'GREATER_THAN_OR_EQUAL_TO', - /** Input value should be less or equal to maximum allowed value. */ - LessThanOrEqualTo = 'LESS_THAN_OR_EQUAL_TO', /** Checkout is already completed. */ AlreadyCompleted = 'ALREADY_COMPLETED', - /** Checkout is locked. */ - Locked = 'LOCKED', - /** Input value is not supported. */ - NotSupported = 'NOT_SUPPORTED', /** Input email contains an invalid domain name. */ BadDomain = 'BAD_DOMAIN', - /** Input Zip is invalid for country provided. */ - InvalidForCountry = 'INVALID_FOR_COUNTRY', - /** Input Zip is invalid for country and province provided. */ - InvalidForCountryAndProvince = 'INVALID_FOR_COUNTRY_AND_PROVINCE', - /** Invalid state in country. */ - InvalidStateInCountry = 'INVALID_STATE_IN_COUNTRY', - /** Invalid province in country. */ - InvalidProvinceInCountry = 'INVALID_PROVINCE_IN_COUNTRY', - /** Invalid region in country. */ - InvalidRegionInCountry = 'INVALID_REGION_IN_COUNTRY', - /** Shipping rate expired. */ - ShippingRateExpired = 'SHIPPING_RATE_EXPIRED', - /** Gift card cannot be applied to a checkout that contains a gift card. */ - GiftCardUnusable = 'GIFT_CARD_UNUSABLE', - /** Gift card is disabled. */ - GiftCardDisabled = 'GIFT_CARD_DISABLED', - /** Gift card code is invalid. */ - GiftCardCodeInvalid = 'GIFT_CARD_CODE_INVALID', - /** Gift card has already been applied. */ - GiftCardAlreadyApplied = 'GIFT_CARD_ALREADY_APPLIED', - /** Gift card currency does not match checkout currency. */ - GiftCardCurrencyMismatch = 'GIFT_CARD_CURRENCY_MISMATCH', - /** Gift card is expired. */ - GiftCardExpired = 'GIFT_CARD_EXPIRED', - /** Gift card has no funds left. */ - GiftCardDepleted = 'GIFT_CARD_DEPLETED', - /** Gift card was not found. */ - GiftCardNotFound = 'GIFT_CARD_NOT_FOUND', + /** The input value is blank. */ + Blank = 'BLANK', /** Cart does not meet discount requirements notice. */ CartDoesNotMeetDiscountRequirementsNotice = 'CART_DOES_NOT_MEET_DISCOUNT_REQUIREMENTS_NOTICE', - /** Discount expired. */ - DiscountExpired = 'DISCOUNT_EXPIRED', + /** Customer already used once per customer discount notice. */ + CustomerAlreadyUsedOncePerCustomerDiscountNotice = 'CUSTOMER_ALREADY_USED_ONCE_PER_CUSTOMER_DISCOUNT_NOTICE', + /** Discount already applied. */ + DiscountAlreadyApplied = 'DISCOUNT_ALREADY_APPLIED', /** Discount disabled. */ DiscountDisabled = 'DISCOUNT_DISABLED', + /** Discount expired. */ + DiscountExpired = 'DISCOUNT_EXPIRED', /** Discount limit reached. */ DiscountLimitReached = 'DISCOUNT_LIMIT_REACHED', /** Discount not found. */ DiscountNotFound = 'DISCOUNT_NOT_FOUND', - /** Customer already used once per customer discount notice. */ - CustomerAlreadyUsedOncePerCustomerDiscountNotice = 'CUSTOMER_ALREADY_USED_ONCE_PER_CUSTOMER_DISCOUNT_NOTICE', /** Checkout is already completed. */ Empty = 'EMPTY', - /** Not enough in stock. */ - NotEnoughInStock = 'NOT_ENOUGH_IN_STOCK', - /** Missing payment input. */ - MissingPaymentInput = 'MISSING_PAYMENT_INPUT', - /** The amount of the payment does not match the value to be paid. */ - TotalPriceMismatch = 'TOTAL_PRICE_MISMATCH', + /** Queue token has expired. */ + ExpiredQueueToken = 'EXPIRED_QUEUE_TOKEN', + /** Gift card has already been applied. */ + GiftCardAlreadyApplied = 'GIFT_CARD_ALREADY_APPLIED', + /** Gift card code is invalid. */ + GiftCardCodeInvalid = 'GIFT_CARD_CODE_INVALID', + /** Gift card currency does not match checkout currency. */ + GiftCardCurrencyMismatch = 'GIFT_CARD_CURRENCY_MISMATCH', + /** Gift card has no funds left. */ + GiftCardDepleted = 'GIFT_CARD_DEPLETED', + /** Gift card is disabled. */ + GiftCardDisabled = 'GIFT_CARD_DISABLED', + /** Gift card is expired. */ + GiftCardExpired = 'GIFT_CARD_EXPIRED', + /** Gift card was not found. */ + GiftCardNotFound = 'GIFT_CARD_NOT_FOUND', + /** Gift card cannot be applied to a checkout that contains a gift card. */ + GiftCardUnusable = 'GIFT_CARD_UNUSABLE', + /** The input value should be greater than or equal to the minimum value allowed. */ + GreaterThanOrEqualTo = 'GREATER_THAN_OR_EQUAL_TO', + /** Higher value discount applied. */ + HigherValueDiscountApplied = 'HIGHER_VALUE_DISCOUNT_APPLIED', + /** The input value is invalid. */ + Invalid = 'INVALID', + /** Cannot specify country and presentment currency code. */ + InvalidCountryAndCurrency = 'INVALID_COUNTRY_AND_CURRENCY', + /** Input Zip is invalid for country provided. */ + InvalidForCountry = 'INVALID_FOR_COUNTRY', + /** Input Zip is invalid for country and province provided. */ + InvalidForCountryAndProvince = 'INVALID_FOR_COUNTRY_AND_PROVINCE', + /** Invalid province in country. */ + InvalidProvinceInCountry = 'INVALID_PROVINCE_IN_COUNTRY', + /** Queue token is invalid. */ + InvalidQueueToken = 'INVALID_QUEUE_TOKEN', + /** Invalid region in country. */ + InvalidRegionInCountry = 'INVALID_REGION_IN_COUNTRY', + /** Invalid state in country. */ + InvalidStateInCountry = 'INVALID_STATE_IN_COUNTRY', + /** The input value should be less than the maximum value allowed. */ + LessThan = 'LESS_THAN', + /** The input value should be less than or equal to the maximum value allowed. */ + LessThanOrEqualTo = 'LESS_THAN_OR_EQUAL_TO', /** Line item was not found in checkout. */ LineItemNotFound = 'LINE_ITEM_NOT_FOUND', + /** Checkout is locked. */ + Locked = 'LOCKED', + /** Maximum number of discount codes limit reached. */ + MaximumDiscountCodeLimitReached = 'MAXIMUM_DISCOUNT_CODE_LIMIT_REACHED', + /** Missing payment input. */ + MissingPaymentInput = 'MISSING_PAYMENT_INPUT', + /** Not enough in stock. */ + NotEnoughInStock = 'NOT_ENOUGH_IN_STOCK', + /** Input value is not supported. */ + NotSupported = 'NOT_SUPPORTED', + /** The input value needs to be blank. */ + Present = 'PRESENT', + /** Shipping rate expired. */ + ShippingRateExpired = 'SHIPPING_RATE_EXPIRED', + /** Throttled during checkout. */ + ThrottledDuringCheckout = 'THROTTLED_DURING_CHECKOUT', + /** The input value is too long. */ + TooLong = 'TOO_LONG', + /** The amount of the payment does not match the value to be paid. */ + TotalPriceMismatch = 'TOTAL_PRICE_MISMATCH', /** Unable to apply discount. */ UnableToApply = 'UNABLE_TO_APPLY', - /** Discount already applied. */ - DiscountAlreadyApplied = 'DISCOUNT_ALREADY_APPLIED', -} - -/** Return type for `checkoutGiftCardApply` mutation. */ -export type CheckoutGiftCardApplyPayload = { - __typename?: 'CheckoutGiftCardApplyPayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutGiftCardRemove` mutation. */ -export type CheckoutGiftCardRemovePayload = { - __typename?: 'CheckoutGiftCardRemovePayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array } /** Return type for `checkoutGiftCardRemoveV2` mutation. */ @@ -859,11 +1264,11 @@ export type CheckoutGiftCardRemoveV2Payload = { __typename?: 'CheckoutGiftCardRemoveV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -873,11 +1278,11 @@ export type CheckoutGiftCardsAppendPayload = { __typename?: 'CheckoutGiftCardsAppendPayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -889,7 +1294,7 @@ export type CheckoutLineItem = Node & { customAttributes: Array /** The discounts that have been allocated onto the checkout line item by discount applications. */ discountAllocations: Array - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The quantity of the line item. */ quantity: Scalars['Int'] @@ -901,16 +1306,24 @@ export type CheckoutLineItem = Node & { variant?: Maybe } -/** An auto-generated type for paginating through multiple CheckoutLineItems. */ +/** + * An auto-generated type for paginating through multiple CheckoutLineItems. + * + */ export type CheckoutLineItemConnection = { __typename?: 'CheckoutLineItemConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in CheckoutLineItemEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one CheckoutLineItem and a cursor during pagination. */ +/** + * An auto-generated type which holds one CheckoutLineItem and a cursor during pagination. + * + */ export type CheckoutLineItemEdge = { __typename?: 'CheckoutLineItemEdge' /** A cursor for use in pagination. */ @@ -922,7 +1335,7 @@ export type CheckoutLineItemEdge = { /** Specifies the input fields to create a line item on a checkout. */ export type CheckoutLineItemInput = { /** Extra information in the form of an array of Key-Value pairs about the line item. */ - customAttributes?: Maybe> + customAttributes?: InputMaybe> /** The quantity of the line item. */ quantity: Scalars['Int'] /** The identifier of the product variant for the line item. */ @@ -931,14 +1344,14 @@ export type CheckoutLineItemInput = { /** Specifies the input fields to update a line item on the checkout. */ export type CheckoutLineItemUpdateInput = { - /** The identifier of the line item. */ - id?: Maybe - /** The variant identifier of the line item. */ - variantId?: Maybe - /** The quantity of the line item. */ - quantity?: Maybe /** Extra information in the form of an array of Key-Value pairs about the line item. */ - customAttributes?: Maybe> + customAttributes?: InputMaybe> + /** The identifier of the line item. */ + id?: InputMaybe + /** The quantity of the line item. */ + quantity?: InputMaybe + /** The variant identifier of the line item. */ + variantId?: InputMaybe } /** Return type for `checkoutLineItemsAdd` mutation. */ @@ -946,11 +1359,11 @@ export type CheckoutLineItemsAddPayload = { __typename?: 'CheckoutLineItemsAddPayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -960,11 +1373,11 @@ export type CheckoutLineItemsRemovePayload = { __typename?: 'CheckoutLineItemsRemovePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -974,7 +1387,7 @@ export type CheckoutLineItemsReplacePayload = { __typename?: 'CheckoutLineItemsReplacePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ userErrors: Array } @@ -983,25 +1396,11 @@ export type CheckoutLineItemsUpdatePayload = { __typename?: 'CheckoutLineItemsUpdatePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead - */ - userErrors: Array -} - -/** Return type for `checkoutShippingAddressUpdate` mutation. */ -export type CheckoutShippingAddressUpdatePayload = { - __typename?: 'CheckoutShippingAddressUpdatePayload' - /** The updated checkout object. */ - checkout: Checkout - /** List of errors that occurred executing the mutation. */ - checkoutUserErrors: Array - /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -1011,11 +1410,11 @@ export type CheckoutShippingAddressUpdateV2Payload = { __typename?: 'CheckoutShippingAddressUpdateV2Payload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -1025,11 +1424,11 @@ export type CheckoutShippingLineUpdatePayload = { __typename?: 'CheckoutShippingLineUpdatePayload' /** The updated checkout object. */ checkout?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ checkoutUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `checkoutUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `checkoutUserErrors` instead. */ userErrors: Array } @@ -1037,71 +1436,97 @@ export type CheckoutShippingLineUpdatePayload = { /** Represents an error that happens during execution of a checkout mutation. */ export type CheckoutUserError = DisplayableError & { __typename?: 'CheckoutUserError' - /** Error code to uniquely identify the error. */ + /** The error code. */ code?: Maybe - /** Path to the input field which caused the error. */ + /** The path to the input field that caused the error. */ field?: Maybe> /** The error message. */ message: Scalars['String'] } /** A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. */ -export type Collection = Node & { - __typename?: 'Collection' - /** Stripped description of the collection, single line with HTML tags removed. */ - description: Scalars['String'] - /** The description of the collection, complete with HTML formatting. */ - descriptionHtml: Scalars['HTML'] - /** - * A human-friendly unique string for the collection automatically generated from its title. - * Limit of 255 characters. - */ - handle: Scalars['String'] - /** Globally unique identifier. */ - id: Scalars['ID'] - /** Image associated with the collection. */ - image?: Maybe - /** List of products in the collection. */ - products: ProductConnection - /** The collection’s name. Limit of 255 characters. */ - title: Scalars['String'] - /** The date and time when the collection was last modified. */ - updatedAt: Scalars['DateTime'] -} +export type Collection = HasMetafields & + Node & + OnlineStorePublishable & { + __typename?: 'Collection' + /** Stripped description of the collection, single line with HTML tags removed. */ + description: Scalars['String'] + /** The description of the collection, complete with HTML formatting. */ + descriptionHtml: Scalars['HTML'] + /** + * A human-friendly unique string for the collection automatically generated from its title. + * Limit of 255 characters. + * + */ + handle: Scalars['String'] + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** Image associated with the collection. */ + image?: Maybe + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ + onlineStoreUrl?: Maybe + /** List of products in the collection. */ + products: ProductConnection + /** The collection's SEO information. */ + seo: Seo + /** The collection’s name. Limit of 255 characters. */ + title: Scalars['String'] + /** The date and time when the collection was last modified. */ + updatedAt: Scalars['DateTime'] + } /** A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. */ export type CollectionDescriptionArgs = { - truncateAt?: Maybe + truncateAt?: InputMaybe } /** A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. */ -export type CollectionImageArgs = { - maxWidth?: Maybe - maxHeight?: Maybe - crop?: Maybe - scale?: Maybe +export type CollectionMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] +} + +/** A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. */ +export type CollectionMetafieldsArgs = { + identifiers: Array } /** A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. */ export type CollectionProductsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe + after?: InputMaybe + before?: InputMaybe + filters?: InputMaybe> + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } -/** An auto-generated type for paginating through multiple Collections. */ +/** + * An auto-generated type for paginating through multiple Collections. + * + */ export type CollectionConnection = { __typename?: 'CollectionConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in CollectionEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Collection and a cursor during pagination. */ +/** + * An auto-generated type which holds one Collection and a cursor during pagination. + * + */ export type CollectionEdge = { __typename?: 'CollectionEdge' /** A cursor for use in pagination. */ @@ -1112,18 +1537,18 @@ export type CollectionEdge = { /** The set of valid sort keys for the Collection query. */ export enum CollectionSortKeys { + /** Sort by the `id` value. */ + Id = 'ID', + /** + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * + */ + Relevance = 'RELEVANCE', /** Sort by the `title` value. */ Title = 'TITLE', /** Sort by the `updated_at` value. */ UpdatedAt = 'UPDATED_AT', - /** Sort by the `id` value. */ - Id = 'ID', - /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. - */ - Relevance = 'RELEVANCE', } /** A comment on an article. */ @@ -1135,13 +1560,13 @@ export type Comment = Node & { content: Scalars['String'] /** The content of the comment, complete with HTML formatting. */ contentHtml: Scalars['HTML'] - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] } /** A comment on an article. */ export type CommentContentArgs = { - truncateAt?: Maybe + truncateAt?: InputMaybe } /** The author of a comment. */ @@ -1153,16 +1578,24 @@ export type CommentAuthor = { name: Scalars['String'] } -/** An auto-generated type for paginating through multiple Comments. */ +/** + * An auto-generated type for paginating through multiple Comments. + * + */ export type CommentConnection = { __typename?: 'CommentConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in CommentEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Comment and a cursor during pagination. */ +/** + * An auto-generated type which holds one Comment and a cursor during pagination. + * + */ export type CommentEdge = { __typename?: 'CommentEdge' /** A cursor for use in pagination. */ @@ -1171,496 +1604,519 @@ export type CommentEdge = { node: Comment } -/** ISO 3166-1 alpha-2 country codes with some differences. */ +/** A country. */ +export type Country = { + __typename?: 'Country' + /** The languages available for the country. */ + availableLanguages: Array + /** The currency of the country. */ + currency: Currency + /** The ISO code of the country. */ + isoCode: CountryCode + /** The name of the country. */ + name: Scalars['String'] + /** The unit system used in the country. */ + unitSystem: UnitSystem +} + +/** + * The code designating a country/region, which generally follows ISO 3166-1 alpha-2 guidelines. + * If a territory doesn't have a country code value in the `CountryCode` enum, then it might be considered a subdivision + * of another country. For example, the territories associated with Spain are represented by the country code `ES`, + * and the territories associated with the United States of America are represented by the country code `US`. + * + */ export enum CountryCode { - /** Afghanistan. */ - Af = 'AF', - /** Åland Islands. */ - Ax = 'AX', - /** Albania. */ - Al = 'AL', - /** Algeria. */ - Dz = 'DZ', - /** Andorra. */ - Ad = 'AD', - /** Angola. */ - Ao = 'AO', - /** Anguilla. */ - Ai = 'AI', - /** Antigua & Barbuda. */ - Ag = 'AG', - /** Argentina. */ - Ar = 'AR', - /** Armenia. */ - Am = 'AM', - /** Aruba. */ - Aw = 'AW', /** Ascension Island. */ Ac = 'AC', - /** Australia. */ - Au = 'AU', + /** 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', + /** Argentina. */ + Ar = 'AR', /** Austria. */ At = 'AT', + /** Australia. */ + Au = 'AU', + /** Aruba. */ + Aw = 'AW', + /** Åland Islands. */ + Ax = 'AX', /** Azerbaijan. */ Az = 'AZ', - /** Bahamas. */ - Bs = 'BS', - /** Bahrain. */ - Bh = 'BH', - /** Bangladesh. */ - Bd = 'BD', - /** Barbados. */ - Bb = 'BB', - /** Belarus. */ - By = 'BY', - /** Belgium. */ - Be = 'BE', - /** Belize. */ - Bz = 'BZ', - /** Benin. */ - Bj = 'BJ', - /** Bermuda. */ - Bm = 'BM', - /** Bhutan. */ - Bt = 'BT', - /** Bolivia. */ - Bo = 'BO', /** Bosnia & Herzegovina. */ Ba = 'BA', - /** Botswana. */ - Bw = 'BW', - /** Bouvet Island. */ - Bv = 'BV', - /** Brazil. */ - Br = 'BR', - /** British Indian Ocean Territory. */ - Io = 'IO', - /** Brunei. */ - Bn = 'BN', - /** Bulgaria. */ - Bg = 'BG', + /** Barbados. */ + Bb = 'BB', + /** Bangladesh. */ + Bd = 'BD', + /** Belgium. */ + Be = 'BE', /** Burkina Faso. */ Bf = 'BF', + /** Bulgaria. */ + Bg = 'BG', + /** Bahrain. */ + Bh = 'BH', /** Burundi. */ Bi = 'BI', - /** Cambodia. */ - Kh = 'KH', - /** Canada. */ - Ca = 'CA', - /** Cape Verde. */ - Cv = 'CV', + /** Benin. */ + Bj = 'BJ', + /** St. Barthélemy. */ + Bl = 'BL', + /** Bermuda. */ + Bm = 'BM', + /** Brunei. */ + Bn = 'BN', + /** Bolivia. */ + Bo = 'BO', /** Caribbean Netherlands. */ Bq = 'BQ', - /** Cayman Islands. */ - Ky = 'KY', - /** Central African Republic. */ - Cf = 'CF', - /** Chad. */ - Td = 'TD', - /** Chile. */ - Cl = 'CL', - /** China. */ - Cn = 'CN', - /** Christmas Island. */ - Cx = 'CX', + /** 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', - /** Colombia. */ - Co = 'CO', - /** Comoros. */ - Km = 'KM', - /** Congo - Brazzaville. */ - Cg = 'CG', /** 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', - /** Croatia. */ - Hr = 'HR', /** Cuba. */ Cu = 'CU', + /** Cape Verde. */ + Cv = 'CV', /** Curaçao. */ Cw = 'CW', + /** Christmas Island. */ + Cx = 'CX', /** Cyprus. */ Cy = 'CY', /** Czechia. */ Cz = 'CZ', - /** Côte d’Ivoire. */ - Ci = 'CI', - /** Denmark. */ - Dk = 'DK', + /** Germany. */ + De = 'DE', /** Djibouti. */ Dj = 'DJ', + /** Denmark. */ + Dk = 'DK', /** Dominica. */ Dm = 'DM', /** Dominican Republic. */ Do = 'DO', + /** Algeria. */ + Dz = 'DZ', /** Ecuador. */ Ec = 'EC', - /** Egypt. */ - Eg = 'EG', - /** El Salvador. */ - Sv = 'SV', - /** Equatorial Guinea. */ - Gq = 'GQ', - /** Eritrea. */ - Er = 'ER', /** Estonia. */ Ee = 'EE', - /** Eswatini. */ - Sz = 'SZ', + /** 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', /** Faroe Islands. */ Fo = 'FO', - /** Fiji. */ - Fj = 'FJ', - /** Finland. */ - Fi = 'FI', /** France. */ Fr = 'FR', - /** French Guiana. */ - Gf = 'GF', - /** French Polynesia. */ - Pf = 'PF', - /** French Southern Territories. */ - Tf = 'TF', /** Gabon. */ Ga = 'GA', - /** Gambia. */ - Gm = 'GM', + /** United Kingdom. */ + Gb = 'GB', + /** Grenada. */ + Gd = 'GD', /** Georgia. */ Ge = 'GE', - /** Germany. */ - De = 'DE', + /** French Guiana. */ + Gf = 'GF', + /** Guernsey. */ + Gg = 'GG', /** Ghana. */ Gh = 'GH', /** Gibraltar. */ Gi = 'GI', - /** Greece. */ - Gr = 'GR', /** Greenland. */ Gl = 'GL', - /** Grenada. */ - Gd = 'GD', - /** Guadeloupe. */ - Gp = 'GP', - /** Guatemala. */ - Gt = 'GT', - /** Guernsey. */ - Gg = 'GG', + /** 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', /** Guinea-Bissau. */ Gw = 'GW', /** Guyana. */ Gy = 'GY', - /** Haiti. */ - Ht = 'HT', - /** Heard & McDonald Islands. */ - Hm = 'HM', - /** Vatican City. */ - Va = 'VA', - /** Honduras. */ - Hn = 'HN', /** Hong Kong SAR. */ Hk = 'HK', + /** Heard & McDonald Islands. */ + Hm = 'HM', + /** Honduras. */ + Hn = 'HN', + /** Croatia. */ + Hr = 'HR', + /** Haiti. */ + Ht = 'HT', /** Hungary. */ Hu = 'HU', - /** Iceland. */ - Is = 'IS', - /** India. */ - In = 'IN', /** Indonesia. */ Id = 'ID', - /** Iran. */ - Ir = 'IR', - /** Iraq. */ - Iq = 'IQ', /** Ireland. */ Ie = 'IE', - /** Isle of Man. */ - Im = 'IM', /** 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', - /** Jamaica. */ - Jm = 'JM', - /** Japan. */ - Jp = 'JP', /** Jersey. */ Je = 'JE', + /** Jamaica. */ + Jm = 'JM', /** Jordan. */ Jo = 'JO', - /** Kazakhstan. */ - Kz = 'KZ', + /** Japan. */ + Jp = 'JP', /** Kenya. */ Ke = 'KE', - /** Kiribati. */ - Ki = 'KI', - /** North Korea. */ - Kp = 'KP', - /** Kosovo. */ - Xk = 'XK', - /** Kuwait. */ - Kw = 'KW', /** 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', - /** Latvia. */ - Lv = 'LV', /** Lebanon. */ Lb = 'LB', - /** Lesotho. */ - Ls = 'LS', - /** Liberia. */ - Lr = 'LR', - /** Libya. */ - Ly = 'LY', + /** St. Lucia. */ + Lc = 'LC', /** Liechtenstein. */ Li = 'LI', + /** Sri Lanka. */ + Lk = 'LK', + /** Liberia. */ + Lr = 'LR', + /** Lesotho. */ + Ls = 'LS', /** Lithuania. */ Lt = 'LT', /** Luxembourg. */ Lu = 'LU', - /** Macao SAR. */ - Mo = 'MO', + /** 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', - /** Malawi. */ - Mw = 'MW', - /** Malaysia. */ - My = 'MY', - /** Maldives. */ - Mv = 'MV', + /** North Macedonia. */ + Mk = 'MK', /** Mali. */ Ml = 'ML', - /** Malta. */ - Mt = 'MT', + /** Myanmar (Burma). */ + Mm = 'MM', + /** Mongolia. */ + Mn = 'MN', + /** Macao SAR. */ + Mo = 'MO', /** Martinique. */ Mq = 'MQ', /** Mauritania. */ Mr = 'MR', - /** Mauritius. */ - Mu = 'MU', - /** Mayotte. */ - Yt = 'YT', - /** Mexico. */ - Mx = 'MX', - /** Moldova. */ - Md = 'MD', - /** Monaco. */ - Mc = 'MC', - /** Mongolia. */ - Mn = 'MN', - /** Montenegro. */ - Me = 'ME', /** Montserrat. */ Ms = 'MS', - /** Morocco. */ - Ma = 'MA', + /** Malta. */ + Mt = 'MT', + /** Mauritius. */ + Mu = 'MU', + /** Maldives. */ + Mv = 'MV', + /** Malawi. */ + Mw = 'MW', + /** Mexico. */ + Mx = 'MX', + /** Malaysia. */ + My = 'MY', /** Mozambique. */ Mz = 'MZ', - /** Myanmar (Burma). */ - Mm = 'MM', /** Namibia. */ Na = 'NA', - /** Nauru. */ - Nr = 'NR', - /** Nepal. */ - Np = 'NP', - /** Netherlands. */ - Nl = 'NL', - /** Netherlands Antilles. */ - An = 'AN', /** New Caledonia. */ Nc = 'NC', - /** New Zealand. */ - Nz = 'NZ', - /** Nicaragua. */ - Ni = 'NI', /** Niger. */ Ne = 'NE', - /** Nigeria. */ - Ng = 'NG', - /** Niue. */ - Nu = 'NU', /** Norfolk Island. */ Nf = 'NF', - /** North Macedonia. */ - Mk = 'MK', + /** 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', - /** Pakistan. */ - Pk = 'PK', - /** Palestinian Territories. */ - Ps = 'PS', /** Panama. */ Pa = 'PA', - /** Papua New Guinea. */ - Pg = 'PG', - /** Paraguay. */ - Py = 'PY', /** Peru. */ Pe = 'PE', + /** French Polynesia. */ + Pf = 'PF', + /** Papua New Guinea. */ + Pg = 'PG', /** Philippines. */ Ph = 'PH', - /** Pitcairn Islands. */ - Pn = 'PN', + /** Pakistan. */ + Pk = 'PK', /** Poland. */ Pl = 'PL', + /** St. Pierre & Miquelon. */ + Pm = 'PM', + /** Pitcairn Islands. */ + Pn = 'PN', + /** Palestinian Territories. */ + Ps = 'PS', /** Portugal. */ Pt = 'PT', + /** Paraguay. */ + Py = 'PY', /** Qatar. */ Qa = 'QA', - /** Cameroon. */ - Cm = 'CM', /** Réunion. */ Re = 'RE', /** Romania. */ Ro = 'RO', + /** Serbia. */ + Rs = 'RS', /** Russia. */ Ru = 'RU', /** Rwanda. */ Rw = 'RW', - /** St. Barthélemy. */ - Bl = 'BL', - /** St. Helena. */ - Sh = 'SH', - /** St. Kitts & Nevis. */ - Kn = 'KN', - /** St. Lucia. */ - Lc = 'LC', - /** St. Martin. */ - Mf = 'MF', - /** St. Pierre & Miquelon. */ - Pm = 'PM', - /** Samoa. */ - Ws = 'WS', - /** San Marino. */ - Sm = 'SM', - /** São Tomé & Príncipe. */ - St = 'ST', /** Saudi Arabia. */ Sa = 'SA', - /** Senegal. */ - Sn = 'SN', - /** Serbia. */ - Rs = 'RS', - /** Seychelles. */ - Sc = 'SC', - /** Sierra Leone. */ - Sl = 'SL', - /** Singapore. */ - Sg = 'SG', - /** Sint Maarten. */ - Sx = 'SX', - /** Slovakia. */ - Sk = 'SK', - /** Slovenia. */ - Si = 'SI', /** Solomon Islands. */ Sb = 'SB', - /** Somalia. */ - So = 'SO', - /** South Africa. */ - Za = 'ZA', - /** South Georgia & South Sandwich Islands. */ - Gs = 'GS', - /** South Korea. */ - Kr = 'KR', - /** South Sudan. */ - Ss = 'SS', - /** Spain. */ - Es = 'ES', - /** Sri Lanka. */ - Lk = 'LK', - /** St. Vincent & Grenadines. */ - Vc = 'VC', + /** Seychelles. */ + Sc = 'SC', /** Sudan. */ Sd = 'SD', - /** Suriname. */ - Sr = 'SR', - /** Svalbard & Jan Mayen. */ - Sj = 'SJ', /** Sweden. */ Se = 'SE', - /** Switzerland. */ - Ch = 'CH', + /** 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', + /** South Sudan. */ + Ss = 'SS', + /** São Tomé & Príncipe. */ + St = 'ST', + /** El Salvador. */ + Sv = 'SV', + /** Sint Maarten. */ + Sx = 'SX', /** Syria. */ Sy = 'SY', - /** Taiwan. */ - Tw = 'TW', - /** Tajikistan. */ - Tj = 'TJ', - /** Tanzania. */ - Tz = 'TZ', - /** Thailand. */ - Th = 'TH', - /** Timor-Leste. */ - Tl = 'TL', - /** Togo. */ - Tg = 'TG', - /** Tokelau. */ - Tk = 'TK', - /** Tonga. */ - To = 'TO', - /** Trinidad & Tobago. */ - Tt = 'TT', + /** Eswatini. */ + Sz = 'SZ', /** Tristan da Cunha. */ Ta = 'TA', - /** Tunisia. */ - Tn = 'TN', - /** Turkey. */ - Tr = 'TR', - /** Turkmenistan. */ - Tm = 'TM', /** 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', - /** Uganda. */ - Ug = 'UG', + /** Taiwan. */ + Tw = 'TW', + /** Tanzania. */ + Tz = 'TZ', /** Ukraine. */ Ua = 'UA', - /** United Arab Emirates. */ - Ae = 'AE', - /** United Kingdom. */ - Gb = 'GB', - /** United States. */ - Us = 'US', + /** Uganda. */ + Ug = 'UG', /** U.S. Outlying Islands. */ Um = 'UM', + /** United States. */ + Us = 'US', /** Uruguay. */ Uy = 'UY', /** Uzbekistan. */ Uz = 'UZ', - /** Vanuatu. */ - Vu = 'VU', + /** Vatican City. */ + Va = 'VA', + /** St. Vincent & Grenadines. */ + Vc = 'VC', /** Venezuela. */ Ve = 'VE', - /** Vietnam. */ - Vn = 'VN', /** British Virgin Islands. */ Vg = 'VG', + /** Vietnam. */ + Vn = 'VN', + /** Vanuatu. */ + Vu = 'VU', /** Wallis & Futuna. */ Wf = 'WF', - /** Western Sahara. */ - Eh = 'EH', + /** Samoa. */ + Ws = 'WS', + /** Kosovo. */ + Xk = 'XK', /** Yemen. */ Ye = 'YE', + /** Mayotte. */ + Yt = 'YT', + /** South Africa. */ + Za = 'ZA', /** Zambia. */ Zm = 'ZM', /** Zimbabwe. */ Zw = 'ZW', + /** Unknown Region. */ + Zz = 'ZZ', } /** Credit card information used for a payment. */ @@ -1687,373 +2143,387 @@ export type CreditCard = { /** * Specifies the fields required to complete a checkout with * a Shopify vaulted credit card payment. - */ -export type CreditCardPaymentInput = { - /** The amount of the payment. */ - amount: Scalars['Money'] - /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). */ - idempotencyKey: Scalars['String'] - /** The billing address for the payment. */ - billingAddress: MailingAddressInput - /** The ID returned by Shopify's Card Vault. */ - vaultId: Scalars['String'] - /** Executes the payment in test mode if possible. Defaults to `false`. */ - test?: Maybe -} - -/** - * Specifies the fields required to complete a checkout with - * a Shopify vaulted credit card payment. + * */ export type CreditCardPaymentInputV2 = { - /** The amount and currency of the payment. */ - paymentAmount: MoneyInput - /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). */ - idempotencyKey: Scalars['String'] /** The billing address for the payment. */ billingAddress: MailingAddressInput + /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests). */ + idempotencyKey: Scalars['String'] + /** The amount and currency of the payment. */ + paymentAmount: MoneyInput + /** Executes the payment in test mode if possible. Defaults to `false`. */ + test?: InputMaybe /** The ID returned by Shopify's Card Vault. */ vaultId: Scalars['String'] - /** Executes the payment in test mode if possible. Defaults to `false`. */ - test?: Maybe } /** The part of the image that should remain after cropping. */ export enum CropRegion { - /** Keep the center of the image. */ - Center = 'CENTER', - /** Keep the top of the image. */ - Top = 'TOP', /** Keep the bottom of the image. */ Bottom = 'BOTTOM', + /** Keep the center of the image. */ + Center = 'CENTER', /** Keep the left of the image. */ Left = 'LEFT', /** Keep the right of the image. */ Right = 'RIGHT', + /** Keep the top of the image. */ + Top = 'TOP', } -/** Currency codes. */ +/** A currency. */ +export type Currency = { + __typename?: 'Currency' + /** The ISO code of the currency. */ + isoCode: CurrencyCode + /** The name of the currency. */ + name: Scalars['String'] + /** The symbol of the currency. */ + symbol: Scalars['String'] +} + +/** + * The three-letter currency codes that represent the world currencies used in stores. These include standard ISO 4217 codes, legacy codes, + * and non-standard codes. + * + */ export enum CurrencyCode { - /** United States Dollars (USD). */ - Usd = 'USD', - /** Euro (EUR). */ - Eur = 'EUR', - /** United Kingdom Pounds (GBP). */ - Gbp = 'GBP', - /** Canadian Dollars (CAD). */ - Cad = 'CAD', + /** United Arab Emirates Dirham (AED). */ + Aed = 'AED', /** Afghan Afghani (AFN). */ Afn = 'AFN', /** Albanian Lek (ALL). */ All = 'ALL', - /** Algerian Dinar (DZD). */ - Dzd = 'DZD', + /** Armenian Dram (AMD). */ + Amd = 'AMD', + /** Netherlands Antillean Guilder. */ + Ang = 'ANG', /** Angolan Kwanza (AOA). */ Aoa = 'AOA', /** Argentine Pesos (ARS). */ Ars = 'ARS', - /** Armenian Dram (AMD). */ - Amd = 'AMD', - /** Aruban Florin (AWG). */ - Awg = 'AWG', /** Australian Dollars (AUD). */ Aud = 'AUD', - /** Barbadian Dollar (BBD). */ - Bbd = 'BBD', + /** Aruban Florin (AWG). */ + Awg = 'AWG', /** Azerbaijani Manat (AZN). */ Azn = 'AZN', + /** Bosnia and Herzegovina Convertible Mark (BAM). */ + Bam = 'BAM', + /** Barbadian Dollar (BBD). */ + Bbd = 'BBD', /** Bangladesh Taka (BDT). */ Bdt = 'BDT', - /** Bahamian Dollar (BSD). */ - Bsd = 'BSD', + /** Bulgarian Lev (BGN). */ + Bgn = 'BGN', /** Bahraini Dinar (BHD). */ Bhd = 'BHD', /** Burundian Franc (BIF). */ Bif = 'BIF', - /** Belize Dollar (BZD). */ - Bzd = 'BZD', /** Bermudian Dollar (BMD). */ Bmd = 'BMD', - /** Bhutanese Ngultrum (BTN). */ - Btn = 'BTN', - /** Bosnia and Herzegovina Convertible Mark (BAM). */ - Bam = 'BAM', - /** Brazilian Real (BRL). */ - Brl = 'BRL', - /** Bolivian Boliviano (BOB). */ - Bob = 'BOB', - /** Botswana Pula (BWP). */ - Bwp = 'BWP', /** Brunei Dollar (BND). */ Bnd = 'BND', - /** Bulgarian Lev (BGN). */ - Bgn = 'BGN', - /** Burmese Kyat (MMK). */ - Mmk = 'MMK', - /** Cambodian Riel. */ - Khr = 'KHR', - /** Cape Verdean escudo (CVE). */ - Cve = 'CVE', - /** Cayman Dollars (KYD). */ - Kyd = 'KYD', - /** Central African CFA Franc (XAF). */ - Xaf = 'XAF', + /** Bolivian Boliviano (BOB). */ + Bob = 'BOB', + /** Brazilian Real (BRL). */ + Brl = 'BRL', + /** Bahamian Dollar (BSD). */ + Bsd = 'BSD', + /** Bhutanese Ngultrum (BTN). */ + Btn = 'BTN', + /** Botswana Pula (BWP). */ + Bwp = 'BWP', + /** Belarusian Ruble (BYN). */ + Byn = 'BYN', + /** + * Belarusian Ruble (BYR). + * @deprecated `BYR` is deprecated. Use `BYN` available from version `2021-01` onwards instead. + */ + Byr = 'BYR', + /** Belize Dollar (BZD). */ + Bzd = 'BZD', + /** Canadian Dollars (CAD). */ + Cad = 'CAD', + /** Congolese franc (CDF). */ + Cdf = 'CDF', + /** Swiss Francs (CHF). */ + Chf = 'CHF', /** Chilean Peso (CLP). */ Clp = 'CLP', /** Chinese Yuan Renminbi (CNY). */ Cny = 'CNY', /** Colombian Peso (COP). */ Cop = 'COP', - /** Comorian Franc (KMF). */ - Kmf = 'KMF', - /** Congolese franc (CDF). */ - Cdf = 'CDF', /** Costa Rican Colones (CRC). */ Crc = 'CRC', - /** Croatian Kuna (HRK). */ - Hrk = 'HRK', + /** Cape Verdean escudo (CVE). */ + Cve = 'CVE', /** Czech Koruny (CZK). */ Czk = 'CZK', + /** Djiboutian Franc (DJF). */ + Djf = 'DJF', /** Danish Kroner (DKK). */ Dkk = 'DKK', /** Dominican Peso (DOP). */ Dop = 'DOP', - /** East Caribbean Dollar (XCD). */ - Xcd = 'XCD', + /** Algerian Dinar (DZD). */ + Dzd = 'DZD', /** Egyptian Pound (EGP). */ Egp = 'EGP', + /** Eritrean Nakfa (ERN). */ + Ern = 'ERN', /** Ethiopian Birr (ETB). */ Etb = 'ETB', - /** CFP Franc (XPF). */ - Xpf = 'XPF', + /** Euro (EUR). */ + Eur = 'EUR', /** Fijian Dollars (FJD). */ Fjd = 'FJD', - /** Gambian Dalasi (GMD). */ - Gmd = 'GMD', + /** Falkland Islands Pounds (FKP). */ + Fkp = 'FKP', + /** United Kingdom Pounds (GBP). */ + Gbp = 'GBP', + /** Georgian Lari (GEL). */ + Gel = 'GEL', /** Ghanaian Cedi (GHS). */ Ghs = 'GHS', + /** Gibraltar Pounds (GIP). */ + Gip = 'GIP', + /** Gambian Dalasi (GMD). */ + Gmd = 'GMD', + /** Guinean Franc (GNF). */ + Gnf = 'GNF', /** Guatemalan Quetzal (GTQ). */ Gtq = 'GTQ', /** Guyanese Dollar (GYD). */ Gyd = 'GYD', - /** Georgian Lari (GEL). */ - Gel = 'GEL', - /** Haitian Gourde (HTG). */ - Htg = 'HTG', - /** Honduran Lempira (HNL). */ - Hnl = 'HNL', /** Hong Kong Dollars (HKD). */ Hkd = 'HKD', + /** Honduran Lempira (HNL). */ + Hnl = 'HNL', + /** Croatian Kuna (HRK). */ + Hrk = 'HRK', + /** Haitian Gourde (HTG). */ + Htg = 'HTG', /** Hungarian Forint (HUF). */ Huf = 'HUF', - /** Icelandic Kronur (ISK). */ - Isk = 'ISK', - /** Indian Rupees (INR). */ - Inr = 'INR', /** Indonesian Rupiah (IDR). */ Idr = 'IDR', /** Israeli New Shekel (NIS). */ Ils = 'ILS', + /** Indian Rupees (INR). */ + Inr = 'INR', /** Iraqi Dinar (IQD). */ Iqd = 'IQD', - /** Jamaican Dollars (JMD). */ - Jmd = 'JMD', - /** Japanese Yen (JPY). */ - Jpy = 'JPY', + /** Iranian Rial (IRR). */ + Irr = 'IRR', + /** Icelandic Kronur (ISK). */ + Isk = 'ISK', /** Jersey Pound. */ Jep = 'JEP', + /** Jamaican Dollars (JMD). */ + Jmd = 'JMD', /** Jordanian Dinar (JOD). */ Jod = 'JOD', - /** Kazakhstani Tenge (KZT). */ - Kzt = 'KZT', + /** Japanese Yen (JPY). */ + Jpy = 'JPY', /** Kenyan Shilling (KES). */ Kes = 'KES', - /** Kuwaiti Dinar (KWD). */ - Kwd = 'KWD', /** Kyrgyzstani Som (KGS). */ Kgs = 'KGS', + /** Cambodian Riel. */ + Khr = 'KHR', + /** Kiribati Dollar (KID). */ + Kid = 'KID', + /** Comorian Franc (KMF). */ + Kmf = 'KMF', + /** South Korean Won (KRW). */ + Krw = 'KRW', + /** Kuwaiti Dinar (KWD). */ + Kwd = 'KWD', + /** Cayman Dollars (KYD). */ + Kyd = 'KYD', + /** Kazakhstani Tenge (KZT). */ + Kzt = 'KZT', /** Laotian Kip (LAK). */ Lak = 'LAK', - /** Latvian Lati (LVL). */ - Lvl = 'LVL', /** Lebanese Pounds (LBP). */ Lbp = 'LBP', - /** Lesotho Loti (LSL). */ - Lsl = 'LSL', + /** Sri Lankan Rupees (LKR). */ + Lkr = 'LKR', /** Liberian Dollar (LRD). */ Lrd = 'LRD', + /** Lesotho Loti (LSL). */ + Lsl = 'LSL', /** Lithuanian Litai (LTL). */ Ltl = 'LTL', + /** Latvian Lati (LVL). */ + Lvl = 'LVL', + /** Libyan Dinar (LYD). */ + Lyd = 'LYD', + /** Moroccan Dirham. */ + Mad = 'MAD', + /** Moldovan Leu (MDL). */ + Mdl = 'MDL', /** Malagasy Ariary (MGA). */ Mga = 'MGA', /** Macedonia Denar (MKD). */ Mkd = 'MKD', + /** Burmese Kyat (MMK). */ + Mmk = 'MMK', + /** Mongolian Tugrik. */ + Mnt = 'MNT', /** Macanese Pataca (MOP). */ Mop = 'MOP', - /** Malawian Kwacha (MWK). */ - Mwk = 'MWK', + /** Mauritanian Ouguiya (MRU). */ + Mru = 'MRU', + /** Mauritian Rupee (MUR). */ + Mur = 'MUR', /** Maldivian Rufiyaa (MVR). */ Mvr = 'MVR', + /** Malawian Kwacha (MWK). */ + Mwk = 'MWK', /** Mexican Pesos (MXN). */ Mxn = 'MXN', /** Malaysian Ringgits (MYR). */ Myr = 'MYR', - /** Mauritian Rupee (MUR). */ - Mur = 'MUR', - /** Moldovan Leu (MDL). */ - Mdl = 'MDL', - /** Moroccan Dirham. */ - Mad = 'MAD', - /** Mongolian Tugrik. */ - Mnt = 'MNT', /** Mozambican Metical. */ Mzn = 'MZN', /** Namibian Dollar. */ Nad = 'NAD', - /** Nepalese Rupee (NPR). */ - Npr = 'NPR', - /** Netherlands Antillean Guilder. */ - Ang = 'ANG', - /** New Zealand Dollars (NZD). */ - Nzd = 'NZD', - /** Nicaraguan Córdoba (NIO). */ - Nio = 'NIO', /** Nigerian Naira (NGN). */ Ngn = 'NGN', + /** Nicaraguan Córdoba (NIO). */ + Nio = 'NIO', /** Norwegian Kroner (NOK). */ Nok = 'NOK', + /** Nepalese Rupee (NPR). */ + Npr = 'NPR', + /** New Zealand Dollars (NZD). */ + Nzd = 'NZD', /** Omani Rial (OMR). */ Omr = 'OMR', /** Panamian Balboa (PAB). */ Pab = 'PAB', - /** Pakistani Rupee (PKR). */ - Pkr = 'PKR', - /** Papua New Guinean Kina (PGK). */ - Pgk = 'PGK', - /** Paraguayan Guarani (PYG). */ - Pyg = 'PYG', /** Peruvian Nuevo Sol (PEN). */ Pen = 'PEN', + /** Papua New Guinean Kina (PGK). */ + Pgk = 'PGK', /** Philippine Peso (PHP). */ Php = 'PHP', + /** Pakistani Rupee (PKR). */ + Pkr = 'PKR', /** Polish Zlotych (PLN). */ Pln = 'PLN', + /** Paraguayan Guarani (PYG). */ + Pyg = 'PYG', /** Qatari Rial (QAR). */ Qar = 'QAR', /** Romanian Lei (RON). */ Ron = 'RON', + /** Serbian dinar (RSD). */ + Rsd = 'RSD', /** Russian Rubles (RUB). */ Rub = 'RUB', /** Rwandan Franc (RWF). */ Rwf = 'RWF', - /** Samoan Tala (WST). */ - Wst = 'WST', /** Saudi Riyal (SAR). */ Sar = 'SAR', - /** Sao Tome And Principe Dobra (STD). */ - Std = 'STD', - /** Serbian dinar (RSD). */ - Rsd = 'RSD', - /** Seychellois Rupee (SCR). */ - Scr = 'SCR', - /** Singapore Dollars (SGD). */ - Sgd = 'SGD', - /** Sudanese Pound (SDG). */ - Sdg = 'SDG', - /** Syrian Pound (SYP). */ - Syp = 'SYP', - /** South African Rand (ZAR). */ - Zar = 'ZAR', - /** South Korean Won (KRW). */ - Krw = 'KRW', - /** South Sudanese Pound (SSP). */ - Ssp = 'SSP', /** Solomon Islands Dollar (SBD). */ Sbd = 'SBD', - /** Sri Lankan Rupees (LKR). */ - Lkr = 'LKR', - /** Surinamese Dollar (SRD). */ - Srd = 'SRD', - /** Swazi Lilangeni (SZL). */ - Szl = 'SZL', + /** Seychellois Rupee (SCR). */ + Scr = 'SCR', + /** Sudanese Pound (SDG). */ + Sdg = 'SDG', /** Swedish Kronor (SEK). */ Sek = 'SEK', - /** Swiss Francs (CHF). */ - Chf = 'CHF', - /** Taiwan Dollars (TWD). */ - Twd = 'TWD', + /** Singapore Dollars (SGD). */ + Sgd = 'SGD', + /** Saint Helena Pounds (SHP). */ + Shp = 'SHP', + /** Sierra Leonean Leone (SLL). */ + Sll = 'SLL', + /** Somali Shilling (SOS). */ + Sos = 'SOS', + /** Surinamese Dollar (SRD). */ + Srd = 'SRD', + /** South Sudanese Pound (SSP). */ + Ssp = 'SSP', + /** + * Sao Tome And Principe Dobra (STD). + * @deprecated `STD` is deprecated. Use `STN` available from version `2022-07` onwards instead. + */ + Std = 'STD', + /** Sao Tome And Principe Dobra (STN). */ + Stn = 'STN', + /** Syrian Pound (SYP). */ + Syp = 'SYP', + /** Swazi Lilangeni (SZL). */ + Szl = 'SZL', /** Thai baht (THB). */ Thb = 'THB', - /** Tanzanian Shilling (TZS). */ - Tzs = 'TZS', - /** Trinidad and Tobago Dollars (TTD). */ - Ttd = 'TTD', - /** Tunisian Dinar (TND). */ - Tnd = 'TND', - /** Turkish Lira (TRY). */ - Try = 'TRY', + /** Tajikistani Somoni (TJS). */ + Tjs = 'TJS', /** Turkmenistani Manat (TMT). */ Tmt = 'TMT', - /** Ugandan Shilling (UGX). */ - Ugx = 'UGX', + /** Tunisian Dinar (TND). */ + Tnd = 'TND', + /** Tongan Pa'anga (TOP). */ + Top = 'TOP', + /** Turkish Lira (TRY). */ + Try = 'TRY', + /** Trinidad and Tobago Dollars (TTD). */ + Ttd = 'TTD', + /** Taiwan Dollars (TWD). */ + Twd = 'TWD', + /** Tanzanian Shilling (TZS). */ + Tzs = 'TZS', /** Ukrainian Hryvnia (UAH). */ Uah = 'UAH', - /** United Arab Emirates Dirham (AED). */ - Aed = 'AED', + /** Ugandan Shilling (UGX). */ + Ugx = 'UGX', + /** United States Dollars (USD). */ + Usd = 'USD', /** Uruguayan Pesos (UYU). */ Uyu = 'UYU', /** Uzbekistan som (UZS). */ Uzs = 'UZS', - /** Vanuatu Vatu (VUV). */ - Vuv = 'VUV', - /** Vietnamese đồng (VND). */ - Vnd = 'VND', - /** West African CFA franc (XOF). */ - Xof = 'XOF', - /** Yemeni Rial (YER). */ - Yer = 'YER', - /** Zambian Kwacha (ZMW). */ - Zmw = 'ZMW', - /** Belarusian Ruble (BYN). */ - Byn = 'BYN', - /** Belarusian Ruble (BYR). */ - Byr = 'BYR', - /** Djiboutian Franc (DJF). */ - Djf = 'DJF', - /** Eritrean Nakfa (ERN). */ - Ern = 'ERN', - /** Falkland Islands Pounds (FKP). */ - Fkp = 'FKP', - /** Gibraltar Pounds (GIP). */ - Gip = 'GIP', - /** Guinean Franc (GNF). */ - Gnf = 'GNF', - /** Iranian Rial (IRR). */ - Irr = 'IRR', - /** Kiribati Dollar (KID). */ - Kid = 'KID', - /** Libyan Dinar (LYD). */ - Lyd = 'LYD', - /** Mauritanian Ouguiya (MRU). */ - Mru = 'MRU', - /** Sierra Leonean Leone (SLL). */ - Sll = 'SLL', - /** Saint Helena Pounds (SHP). */ - Shp = 'SHP', - /** Somali Shilling (SOS). */ - Sos = 'SOS', - /** Tajikistani Somoni (TJS). */ - Tjs = 'TJS', - /** Tongan Pa'anga (TOP). */ - Top = 'TOP', - /** Venezuelan Bolivares (VEF). */ + /** Venezuelan Bolivares (VED). */ + Ved = 'VED', + /** + * Venezuelan Bolivares (VEF). + * @deprecated `VEF` is deprecated. Use `VES` available from version `2020-10` onwards instead. + */ Vef = 'VEF', /** Venezuelan Bolivares (VES). */ Ves = 'VES', + /** Vietnamese đồng (VND). */ + Vnd = 'VND', + /** Vanuatu Vatu (VUV). */ + Vuv = 'VUV', + /** Samoan Tala (WST). */ + Wst = 'WST', + /** Central African CFA Franc (XAF). */ + Xaf = 'XAF', + /** East Caribbean Dollar (XCD). */ + Xcd = 'XCD', + /** West African CFA franc (XOF). */ + Xof = 'XOF', + /** CFP Franc (XPF). */ + Xpf = 'XPF', + /** Unrecognized currency. */ + Xxx = 'XXX', + /** Yemeni Rial (YER). */ + Yer = 'YER', + /** South African Rand (ZAR). */ + Zar = 'ZAR', + /** Zambian Kwacha (ZMW). */ + Zmw = 'ZMW', } /** A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. */ -export type Customer = { +export type Customer = HasMetafields & { __typename?: 'Customer' /** Indicates whether the customer has consented to be sent marketing material via email. */ acceptsMarketing: Scalars['Boolean'] @@ -2075,6 +2545,13 @@ export type Customer = { lastIncompleteCheckout?: Maybe /** The customer’s last name. */ lastName?: Maybe + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> /** The orders associated with the customer. */ orders: OrderConnection /** The customer’s phone number. */ @@ -2082,6 +2559,7 @@ export type Customer = { /** * A comma separated list of tags that have been added to the customer. * Additional access scope required: unauthenticated_read_customer_tags. + * */ tags: Array /** The date and time when the customer information was updated. */ @@ -2090,22 +2568,33 @@ export type Customer = { /** A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. */ export type CustomerAddressesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. */ +export type CustomerMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] +} + +/** A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. */ +export type CustomerMetafieldsArgs = { + identifiers: Array } /** A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. */ export type CustomerOrdersArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } /** A CustomerAccessToken represents the unique token required to make modifications to the customer object. */ @@ -2130,11 +2619,11 @@ export type CustomerAccessTokenCreatePayload = { __typename?: 'CustomerAccessTokenCreatePayload' /** The newly created customer access token object. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2144,7 +2633,7 @@ export type CustomerAccessTokenCreateWithMultipassPayload = { __typename?: 'CustomerAccessTokenCreateWithMultipassPayload' /** An access token object associated with the customer. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array } @@ -2155,7 +2644,7 @@ export type CustomerAccessTokenDeletePayload = { deletedAccessToken?: Maybe /** ID of the destroyed customer access token. */ deletedCustomerAccessTokenId?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ userErrors: Array } @@ -2164,7 +2653,7 @@ export type CustomerAccessTokenRenewPayload = { __typename?: 'CustomerAccessTokenRenewPayload' /** The renewed customer access token object. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ userErrors: Array } @@ -2175,7 +2664,7 @@ export type CustomerActivateByUrlPayload = { customer?: Maybe /** A new customer access token for the customer. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array } @@ -2194,11 +2683,11 @@ export type CustomerActivatePayload = { customer?: Maybe /** A newly created customer access token object for the customer. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2208,11 +2697,11 @@ export type CustomerAddressCreatePayload = { __typename?: 'CustomerAddressCreatePayload' /** The new customer address object. */ customerAddress?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2220,13 +2709,13 @@ export type CustomerAddressCreatePayload = { /** Return type for `customerAddressDelete` mutation. */ export type CustomerAddressDeletePayload = { __typename?: 'CustomerAddressDeletePayload' - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** ID of the deleted customer address. */ deletedCustomerAddressId?: Maybe /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2236,33 +2725,34 @@ export type CustomerAddressUpdatePayload = { __typename?: 'CustomerAddressUpdatePayload' /** The customer’s updated mailing address. */ customerAddress?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } -/** Specifies the fields required to create a new customer. */ +/** The fields required to create a new customer. */ export type CustomerCreateInput = { - /** The customer’s first name. */ - firstName?: Maybe - /** The customer’s last name. */ - lastName?: Maybe + /** Indicates whether the customer has consented to be sent marketing material via email. */ + acceptsMarketing?: InputMaybe /** The customer’s email. */ email: Scalars['String'] + /** The customer’s first name. */ + firstName?: InputMaybe + /** The customer’s last name. */ + lastName?: InputMaybe + /** The login password used by the customer. */ + password: Scalars['String'] /** * A unique phone number for the customer. * * Formatted using E.164 standard. For example, _+16135551111_. + * */ - phone?: Maybe - /** The login password used by the customer. */ - password: Scalars['String'] - /** Indicates whether the customer has consented to be sent marketing material via email. */ - acceptsMarketing?: Maybe + phone?: InputMaybe } /** Return type for `customerCreate` mutation. */ @@ -2270,11 +2760,11 @@ export type CustomerCreatePayload = { __typename?: 'CustomerCreatePayload' /** The created customer object. */ customer?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2284,57 +2774,57 @@ export type CustomerDefaultAddressUpdatePayload = { __typename?: 'CustomerDefaultAddressUpdatePayload' /** The updated customer object. */ customer?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } -/** Possible error codes that could be returned by CustomerUserError. */ +/** Possible error codes that can be returned by `CustomerUserError`. */ export enum CustomerErrorCode { - /** Input value is blank. */ + /** Customer already enabled. */ + AlreadyEnabled = 'ALREADY_ENABLED', + /** Input email contains an invalid domain name. */ + BadDomain = 'BAD_DOMAIN', + /** The input value is blank. */ Blank = 'BLANK', - /** Input value is invalid. */ - Invalid = 'INVALID', - /** Input value is already taken. */ - Taken = 'TAKEN', - /** Input value is too long. */ - TooLong = 'TOO_LONG', - /** Input value is too short. */ - TooShort = 'TOO_SHORT', - /** Unidentified customer. */ - UnidentifiedCustomer = 'UNIDENTIFIED_CUSTOMER', - /** Customer is disabled. */ - CustomerDisabled = 'CUSTOMER_DISABLED', - /** Input password starts or ends with whitespace. */ - PasswordStartsOrEndsWithWhitespace = 'PASSWORD_STARTS_OR_ENDS_WITH_WHITESPACE', /** Input contains HTML tags. */ ContainsHtmlTags = 'CONTAINS_HTML_TAGS', /** Input contains URL. */ ContainsUrl = 'CONTAINS_URL', - /** Invalid activation token. */ - TokenInvalid = 'TOKEN_INVALID', - /** Customer already enabled. */ - AlreadyEnabled = 'ALREADY_ENABLED', - /** Address does not exist. */ - NotFound = 'NOT_FOUND', - /** Input email contains an invalid domain name. */ - BadDomain = 'BAD_DOMAIN', + /** Customer is disabled. */ + CustomerDisabled = 'CUSTOMER_DISABLED', + /** The input value is invalid. */ + Invalid = 'INVALID', /** Multipass token is not valid. */ InvalidMultipassRequest = 'INVALID_MULTIPASS_REQUEST', + /** Address does not exist. */ + NotFound = 'NOT_FOUND', + /** Input password starts or ends with whitespace. */ + PasswordStartsOrEndsWithWhitespace = 'PASSWORD_STARTS_OR_ENDS_WITH_WHITESPACE', + /** The input value is already taken. */ + Taken = 'TAKEN', + /** Invalid activation token. */ + TokenInvalid = 'TOKEN_INVALID', + /** The input value is too long. */ + TooLong = 'TOO_LONG', + /** The input value is too short. */ + TooShort = 'TOO_SHORT', + /** Unidentified customer. */ + UnidentifiedCustomer = 'UNIDENTIFIED_CUSTOMER', } /** Return type for `customerRecover` mutation. */ export type CustomerRecoverPayload = { __typename?: 'CustomerRecoverPayload' - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2346,21 +2836,21 @@ export type CustomerResetByUrlPayload = { customer?: Maybe /** A newly created customer access token object for the customer. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } /** Specifies the fields required to reset a customer’s password. */ export type CustomerResetInput = { - /** The reset token required to reset the customer’s password. */ - resetToken: Scalars['String'] /** New password that will be set as part of the reset password process. */ password: Scalars['String'] + /** The reset token required to reset the customer’s password. */ + resetToken: Scalars['String'] } /** Return type for `customerReset` mutation. */ @@ -2370,33 +2860,34 @@ export type CustomerResetPayload = { customer?: Maybe /** A newly created customer access token object for the customer. */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } /** Specifies the fields required to update the Customer information. */ export type CustomerUpdateInput = { - /** The customer’s first name. */ - firstName?: Maybe - /** The customer’s last name. */ - lastName?: Maybe + /** Indicates whether the customer has consented to be sent marketing material via email. */ + acceptsMarketing?: InputMaybe /** The customer’s email. */ - email?: Maybe + email?: InputMaybe + /** The customer’s first name. */ + firstName?: InputMaybe + /** The customer’s last name. */ + lastName?: InputMaybe + /** The login password used by the customer. */ + password?: InputMaybe /** * A unique phone number for the customer. * * Formatted using E.164 standard. For example, _+16135551111_. To remove the phone number, specify `null`. + * */ - phone?: Maybe - /** The login password used by the customer. */ - password?: Maybe - /** Indicates whether the customer has consented to be sent marketing material via email. */ - acceptsMarketing?: Maybe + phone?: InputMaybe } /** Return type for `customerUpdate` mutation. */ @@ -2407,13 +2898,14 @@ export type CustomerUpdatePayload = { /** * The newly created customer access token. If the customer's password is updated, all previous access tokens * (including the one used to perform this mutation) become invalid, and a new token is generated. + * */ customerAccessToken?: Maybe - /** List of errors that occurred executing the mutation. */ + /** The list of errors that occurred from executing the mutation. */ customerUserErrors: Array /** - * List of errors that occurred executing the mutation. - * @deprecated Use `customerUserErrors` instead + * The list of errors that occurred from executing the mutation. + * @deprecated Use `customerUserErrors` instead. */ userErrors: Array } @@ -2421,27 +2913,46 @@ export type CustomerUpdatePayload = { /** Represents an error that happens during execution of a customer mutation. */ export type CustomerUserError = DisplayableError & { __typename?: 'CustomerUserError' - /** Error code to uniquely identify the error. */ + /** The error code. */ code?: Maybe - /** Path to the input field which caused the error. */ + /** The path to the input field that caused the error. */ field?: Maybe> /** The error message. */ message: Scalars['String'] } +/** List of different delivery method types. */ +export enum DeliveryMethodType { + /** Local Delivery. */ + Local = 'LOCAL', + /** None. */ + None = 'NONE', + /** Shipping to a Pickup Point. */ + PickupPoint = 'PICKUP_POINT', + /** Local Pickup. */ + PickUp = 'PICK_UP', + /** Retail. */ + Retail = 'RETAIL', + /** Shipping. */ + Shipping = 'SHIPPING', +} + /** Digital wallet, such as Apple Pay, which can be used for accelerated checkouts. */ export enum DigitalWallet { - /** Apple Pay. */ - ApplePay = 'APPLE_PAY', /** Android Pay. */ AndroidPay = 'ANDROID_PAY', + /** Apple Pay. */ + ApplePay = 'APPLE_PAY', /** Google Pay. */ GooglePay = 'GOOGLE_PAY', /** Shopify Pay. */ ShopifyPay = 'SHOPIFY_PAY', } -/** An amount discounting the line that has been allocated by a discount. */ +/** + * An amount discounting the line that has been allocated by a discount. + * + */ export type DiscountAllocation = { __typename?: 'DiscountAllocation' /** Amount of discount allocated. */ @@ -2453,6 +2964,7 @@ export type DiscountAllocation = { /** * Discount applications capture the intentions of a discount source at * the time of application. + * */ export type DiscountApplication = { /** The method by which the discount's value is allocated to its entitled items. */ @@ -2471,20 +2983,31 @@ export enum DiscountApplicationAllocationMethod { Across = 'ACROSS', /** The value is applied onto every entitled line. */ Each = 'EACH', - /** The value is specifically applied onto a particular line. */ + /** + * The value is specifically applied onto a particular line. + * @deprecated Use ACROSS instead. + */ One = 'ONE', } -/** An auto-generated type for paginating through multiple DiscountApplications. */ +/** + * An auto-generated type for paginating through multiple DiscountApplications. + * + */ export type DiscountApplicationConnection = { __typename?: 'DiscountApplicationConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in DiscountApplicationEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one DiscountApplication and a cursor during pagination. */ +/** + * An auto-generated type which holds one DiscountApplication and a cursor during pagination. + * + */ export type DiscountApplicationEdge = { __typename?: 'DiscountApplicationEdge' /** A cursor for use in pagination. */ @@ -2494,19 +3017,25 @@ export type DiscountApplicationEdge = { } /** - * Which lines on the order that the discount is allocated over, of the type - * defined by the Discount Application's target_type. + * The lines on the order to which the discount is applied, of the type defined by + * the discount application's `targetType`. For example, the value `ENTITLED`, combined with a `targetType` of + * `LINE_ITEM`, applies the discount on all line items that are entitled to the discount. + * The value `ALL`, combined with a `targetType` of `SHIPPING_LINE`, applies the discount on all shipping lines. + * */ export enum DiscountApplicationTargetSelection { /** The discount is allocated onto all the lines. */ All = 'ALL', - /** The discount is allocated onto only the lines it is entitled for. */ + /** The discount is allocated onto only the lines that it's entitled for. */ Entitled = 'ENTITLED', /** The discount is allocated onto explicitly chosen lines. */ Explicit = 'EXPLICIT', } -/** The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards. */ +/** + * The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards. + * + */ export enum DiscountApplicationTargetType { /** The discount applies onto line items. */ LineItem = 'LINE_ITEM', @@ -2517,6 +3046,7 @@ export enum DiscountApplicationTargetType { /** * Discount code applications capture the intentions of a discount code at * the time that it is applied. + * */ export type DiscountCodeApplication = DiscountApplication & { __typename?: 'DiscountCodeApplication' @@ -2536,7 +3066,7 @@ export type DiscountCodeApplication = DiscountApplication & { /** Represents an error in the input of a mutation. */ export type DisplayableError = { - /** Path to the input field which caused the error. */ + /** The path to the input field that caused the error. */ field?: Maybe> /** The error message. */ message: Scalars['String'] @@ -2554,21 +3084,77 @@ export type Domain = { } /** Represents a video hosted outside of Shopify. */ -export type ExternalVideo = Node & - Media & { +export type ExternalVideo = Media & + Node & { __typename?: 'ExternalVideo' /** A word or phrase to share the nature or contents of a media. */ alt?: Maybe - /** The URL. */ + /** The embed URL of the video for the respective host. */ + embedUrl: Scalars['URL'] + /** + * The URL. + * @deprecated Use `originUrl` instead. + */ embeddedUrl: Scalars['URL'] - /** Globally unique identifier. */ + /** The host of the external video. */ + host: MediaHost + /** A globally-unique identifier. */ id: Scalars['ID'] /** The media content type. */ mediaContentType: MediaContentType + /** The origin URL of the video on the respective host. */ + originUrl: Scalars['URL'] /** The preview image for the media. */ previewImage?: Maybe } +/** A filter that is supported on the parent field. */ +export type Filter = { + __typename?: 'Filter' + /** A unique identifier. */ + id: Scalars['String'] + /** A human-friendly string for this filter. */ + label: Scalars['String'] + /** An enumeration that denotes the type of data this filter represents. */ + type: FilterType + /** The list of values for this filter. */ + values: Array +} + +/** + * The type of data that the filter group represents. + * + * For more information, refer to [Filter products in a collection with the Storefront API] + * (https://shopify.dev/api/examples/filter-products). + * + */ +export enum FilterType { + /** A boolean value. */ + Boolean = 'BOOLEAN', + /** A list of selectable values. */ + List = 'LIST', + /** A range of prices. */ + PriceRange = 'PRICE_RANGE', +} + +/** A selectable value within a filter. */ +export type FilterValue = { + __typename?: 'FilterValue' + /** The number of results that match this filter value. */ + count: Scalars['Int'] + /** A unique identifier. */ + id: Scalars['String'] + /** + * An input object that can be used to filter by this value on the parent field. + * + * The value is provided as a helper for building dynamic filtering UI. For example, if you have a list of selected `FilterValue` objects, you can combine their respective `input` values to use in a subsequent query. + * + */ + input: Scalars['JSON'] + /** A human-friendly string for this filter value. */ + label: Scalars['String'] +} + /** Represents a single fulfillment in an order. */ export type Fulfillment = { __typename?: 'Fulfillment' @@ -2579,22 +3165,23 @@ export type Fulfillment = { /** * Tracking information associated with the fulfillment, * such as the tracking number and tracking URL. + * */ trackingInfo: Array } /** Represents a single fulfillment in an order. */ export type FulfillmentFulfillmentLineItemsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** Represents a single fulfillment in an order. */ export type FulfillmentTrackingInfoArgs = { - first?: Maybe + first?: InputMaybe } /** Represents a single line item in a fulfillment. There is at most one fulfillment line item for each order line item. */ @@ -2606,16 +3193,24 @@ export type FulfillmentLineItem = { quantity: Scalars['Int'] } -/** An auto-generated type for paginating through multiple FulfillmentLineItems. */ +/** + * An auto-generated type for paginating through multiple FulfillmentLineItems. + * + */ export type FulfillmentLineItemConnection = { __typename?: 'FulfillmentLineItemConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in FulfillmentLineItemEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination. */ +/** + * An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination. + * + */ export type FulfillmentLineItemEdge = { __typename?: 'FulfillmentLineItemEdge' /** A cursor for use in pagination. */ @@ -2633,28 +3228,59 @@ export type FulfillmentTrackingInfo = { url?: Maybe } +/** The generic file resource lets you manage files in a merchant’s store. Generic files include any file that doesn’t fit into a designated type such as image or video. Example: PDF, JSON. */ +export type GenericFile = Node & { + __typename?: 'GenericFile' + /** A word or phrase to indicate the contents of a file. */ + alt?: Maybe + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The MIME type of the file. */ + mimeType?: Maybe + /** The size of the original file in bytes. */ + originalFileSize?: Maybe + /** The preview image for the file. */ + previewImage?: Maybe + /** The URL of the file. */ + url?: Maybe +} + +/** Used to specify a geographical location. */ +export type GeoCoordinateInput = { + /** The coordinate's latitude value. */ + latitude: Scalars['Float'] + /** The coordinate's longitude value. */ + longitude: Scalars['Float'] +} + /** Represents information about the metafields associated to the specified resource. */ export type HasMetafields = { - /** The metafield associated with the resource. */ + /** Returns a metafield found by namespace and key. */ metafield?: Maybe - /** A paginated list of metafields associated with the resource. */ - metafields: MetafieldConnection + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> } /** Represents information about the metafields associated to the specified resource. */ export type HasMetafieldsMetafieldArgs = { - namespace: Scalars['String'] key: Scalars['String'] + namespace: Scalars['String'] } /** Represents information about the metafields associated to the specified resource. */ export type HasMetafieldsMetafieldsArgs = { - namespace?: Maybe - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + identifiers: Array +} + +/** Identifies a metafield on an owner resource by namespace and key. */ +export type HasMetafieldsIdentifier = { + /** The identifier for the metafield. */ + key: Scalars['String'] + /** A container for a set of metafields. */ + namespace: Scalars['String'] } /** Represents an image resource. */ @@ -2670,52 +3296,13 @@ export type Image = { * The location of the original image as a URL. * * If there are any existing transformations in the original source URL, they will remain and not be stripped. + * + * @deprecated Use `url` instead. */ originalSrc: Scalars['URL'] /** * The location of the image as a URL. - * @deprecated Previously an image had a single `src` field. This could either return the original image - * location or a URL that contained transformations such as sizing or scale. - * - * These transformations were specified by arguments on the parent field. - * - * Now an image has two distinct URL fields: `originalSrc` and `transformedSrc`. - * - * * `originalSrc` - the original unmodified image URL - * * `transformedSrc` - the image URL with the specified transformations included - * - * To migrate to the new fields, image transformations should be moved from the parent field to `transformedSrc`. - * - * Before: - * ```graphql - * { - * shop { - * productImages(maxWidth: 200, scale: 2) { - * edges { - * node { - * src - * } - * } - * } - * } - * } - * ``` - * - * After: - * ```graphql - * { - * shop { - * productImages { - * edges { - * node { - * transformedSrc(maxWidth: 200, scale: 2) - * } - * } - * } - * } - * } - * ``` - * + * @deprecated Use `url` instead. */ src: Scalars['URL'] /** @@ -2723,41 +3310,67 @@ export type Image = { * * All transformation arguments are considered "best-effort". If they can be applied to an image, they will be. * Otherwise any transformations which an image type does not support will be ignored. + * + * @deprecated Use `url(transform:)` instead */ transformedSrc: Scalars['URL'] + /** + * The location of the image as a URL. + * + * If no transform options are specified, then the original image will be preserved including any pre-applied transforms. + * + * All transformation options are considered "best-effort". Any transformation that the original image type doesn't support will be ignored. + * + * If you need multiple variations of the same image, then you can use [GraphQL aliases](https://graphql.org/learn/queries/#aliases). + * + */ + url: Scalars['URL'] /** The original width of the image in pixels. Returns `null` if the image is not hosted by Shopify. */ width?: Maybe } /** Represents an image resource. */ export type ImageTransformedSrcArgs = { - maxWidth?: Maybe - maxHeight?: Maybe - crop?: Maybe - scale?: Maybe - preferredContentType?: Maybe + crop?: InputMaybe + maxHeight?: InputMaybe + maxWidth?: InputMaybe + preferredContentType?: InputMaybe + scale?: InputMaybe } -/** An auto-generated type for paginating through multiple Images. */ +/** Represents an image resource. */ +export type ImageUrlArgs = { + transform?: InputMaybe +} + +/** + * An auto-generated type for paginating through multiple Images. + * + */ export type ImageConnection = { __typename?: 'ImageConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in ImageEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } /** List of supported image content types. */ export enum ImageContentType { - /** A PNG image. */ - Png = 'PNG', /** A JPG image. */ Jpg = 'JPG', + /** A PNG image. */ + Png = 'PNG', /** A WEBP image. */ Webp = 'WEBP', } -/** An auto-generated type which holds one Image and a cursor during pagination. */ +/** + * An auto-generated type which holds one Image and a cursor during pagination. + * + */ export type ImageEdge = { __typename?: 'ImageEdge' /** A cursor for use in pagination. */ @@ -2766,30 +3379,469 @@ export type ImageEdge = { node: Image } +/** + * The available options for transforming an image. + * + * All transformation options are considered best effort. Any transformation that the original image type doesn't support will be ignored. + * + */ +export type ImageTransformInput = { + /** + * The region of the image to remain after cropping. + * Must be used in conjunction with the `maxWidth` and/or `maxHeight` fields, where the `maxWidth` and `maxHeight` aren't equal. + * The `crop` argument should coincide with the smaller value. A smaller `maxWidth` indicates a `LEFT` or `RIGHT` crop, while + * a smaller `maxHeight` indicates a `TOP` or `BOTTOM` crop. For example, `{ maxWidth: 5, maxHeight: 10, crop: LEFT }` will result + * in an image with a width of 5 and height of 10, where the right side of the image is removed. + * + */ + crop?: InputMaybe + /** + * Image height in pixels between 1 and 5760. + * + */ + maxHeight?: InputMaybe + /** + * Image width in pixels between 1 and 5760. + * + */ + maxWidth?: InputMaybe + /** + * Convert the source image into the preferred content type. + * Supported conversions: `.svg` to `.png`, any file type to `.jpg`, and any file type to `.webp`. + * + */ + preferredContentType?: InputMaybe + /** + * Image size multiplier for high-resolution retina displays. Must be within 1..3. + * + */ + scale?: InputMaybe +} + +/** A language. */ +export type Language = { + __typename?: 'Language' + /** The name of the language in the language itself. If the language uses capitalization, it is capitalized for a mid-sentence position. */ + endonymName: Scalars['String'] + /** The ISO code. */ + isoCode: LanguageCode + /** The name of the language in the current language. */ + name: Scalars['String'] +} + +/** ISO 639-1 language codes supported by Shopify. */ +export enum LanguageCode { + /** Afrikaans. */ + Af = 'AF', + /** Akan. */ + Ak = 'AK', + /** Amharic. */ + Am = 'AM', + /** Arabic. */ + Ar = 'AR', + /** Assamese. */ + As = 'AS', + /** Azerbaijani. */ + Az = 'AZ', + /** Belarusian. */ + Be = 'BE', + /** Bulgarian. */ + Bg = 'BG', + /** Bambara. */ + Bm = 'BM', + /** Bangla. */ + Bn = 'BN', + /** Tibetan. */ + Bo = 'BO', + /** Breton. */ + Br = 'BR', + /** Bosnian. */ + Bs = 'BS', + /** Catalan. */ + Ca = 'CA', + /** Chechen. */ + Ce = 'CE', + /** Czech. */ + Cs = 'CS', + /** Church Slavic. */ + Cu = 'CU', + /** Welsh. */ + Cy = 'CY', + /** Danish. */ + Da = 'DA', + /** German. */ + De = 'DE', + /** Dzongkha. */ + Dz = 'DZ', + /** Ewe. */ + Ee = 'EE', + /** Greek. */ + El = 'EL', + /** English. */ + En = 'EN', + /** Esperanto. */ + Eo = 'EO', + /** Spanish. */ + Es = 'ES', + /** Estonian. */ + Et = 'ET', + /** Basque. */ + Eu = 'EU', + /** Persian. */ + Fa = 'FA', + /** Fulah. */ + Ff = 'FF', + /** Finnish. */ + Fi = 'FI', + /** Faroese. */ + Fo = 'FO', + /** French. */ + Fr = 'FR', + /** Western Frisian. */ + Fy = 'FY', + /** Irish. */ + Ga = 'GA', + /** Scottish Gaelic. */ + Gd = 'GD', + /** Galician. */ + Gl = 'GL', + /** Gujarati. */ + Gu = 'GU', + /** Manx. */ + Gv = 'GV', + /** Hausa. */ + Ha = 'HA', + /** Hebrew. */ + He = 'HE', + /** Hindi. */ + Hi = 'HI', + /** Croatian. */ + Hr = 'HR', + /** Hungarian. */ + Hu = 'HU', + /** Armenian. */ + Hy = 'HY', + /** Interlingua. */ + Ia = 'IA', + /** Indonesian. */ + Id = 'ID', + /** Igbo. */ + Ig = 'IG', + /** Sichuan Yi. */ + Ii = 'II', + /** Icelandic. */ + Is = 'IS', + /** Italian. */ + It = 'IT', + /** Japanese. */ + Ja = 'JA', + /** Javanese. */ + Jv = 'JV', + /** Georgian. */ + Ka = 'KA', + /** Kikuyu. */ + Ki = 'KI', + /** Kazakh. */ + Kk = 'KK', + /** Kalaallisut. */ + Kl = 'KL', + /** Khmer. */ + Km = 'KM', + /** Kannada. */ + Kn = 'KN', + /** Korean. */ + Ko = 'KO', + /** Kashmiri. */ + Ks = 'KS', + /** Kurdish. */ + Ku = 'KU', + /** Cornish. */ + Kw = 'KW', + /** Kyrgyz. */ + Ky = 'KY', + /** Luxembourgish. */ + Lb = 'LB', + /** Ganda. */ + Lg = 'LG', + /** Lingala. */ + Ln = 'LN', + /** Lao. */ + Lo = 'LO', + /** Lithuanian. */ + Lt = 'LT', + /** Luba-Katanga. */ + Lu = 'LU', + /** Latvian. */ + Lv = 'LV', + /** Malagasy. */ + Mg = 'MG', + /** Māori. */ + Mi = 'MI', + /** Macedonian. */ + Mk = 'MK', + /** Malayalam. */ + Ml = 'ML', + /** Mongolian. */ + Mn = 'MN', + /** Marathi. */ + Mr = 'MR', + /** Malay. */ + Ms = 'MS', + /** Maltese. */ + Mt = 'MT', + /** Burmese. */ + My = 'MY', + /** Norwegian (Bokmål). */ + Nb = 'NB', + /** North Ndebele. */ + Nd = 'ND', + /** Nepali. */ + Ne = 'NE', + /** Dutch. */ + Nl = 'NL', + /** Norwegian Nynorsk. */ + Nn = 'NN', + /** Norwegian. */ + No = 'NO', + /** Oromo. */ + Om = 'OM', + /** Odia. */ + Or = 'OR', + /** Ossetic. */ + Os = 'OS', + /** Punjabi. */ + Pa = 'PA', + /** Polish. */ + Pl = 'PL', + /** Pashto. */ + Ps = 'PS', + /** Portuguese. */ + Pt = 'PT', + /** Portuguese (Brazil). */ + PtBr = 'PT_BR', + /** Portuguese (Portugal). */ + PtPt = 'PT_PT', + /** Quechua. */ + Qu = 'QU', + /** Romansh. */ + Rm = 'RM', + /** Rundi. */ + Rn = 'RN', + /** Romanian. */ + Ro = 'RO', + /** Russian. */ + Ru = 'RU', + /** Kinyarwanda. */ + Rw = 'RW', + /** Sindhi. */ + Sd = 'SD', + /** Northern Sami. */ + Se = 'SE', + /** Sango. */ + Sg = 'SG', + /** Sinhala. */ + Si = 'SI', + /** Slovak. */ + Sk = 'SK', + /** Slovenian. */ + Sl = 'SL', + /** Shona. */ + Sn = 'SN', + /** Somali. */ + So = 'SO', + /** Albanian. */ + Sq = 'SQ', + /** Serbian. */ + Sr = 'SR', + /** Sundanese. */ + Su = 'SU', + /** Swedish. */ + Sv = 'SV', + /** Swahili. */ + Sw = 'SW', + /** Tamil. */ + Ta = 'TA', + /** Telugu. */ + Te = 'TE', + /** Tajik. */ + Tg = 'TG', + /** Thai. */ + Th = 'TH', + /** Tigrinya. */ + Ti = 'TI', + /** Turkmen. */ + Tk = 'TK', + /** Tongan. */ + To = 'TO', + /** Turkish. */ + Tr = 'TR', + /** Tatar. */ + Tt = 'TT', + /** Uyghur. */ + Ug = 'UG', + /** Ukrainian. */ + Uk = 'UK', + /** Urdu. */ + Ur = 'UR', + /** Uzbek. */ + Uz = 'UZ', + /** Vietnamese. */ + Vi = 'VI', + /** Volapük. */ + Vo = 'VO', + /** Wolof. */ + Wo = 'WO', + /** Xhosa. */ + Xh = 'XH', + /** Yiddish. */ + Yi = 'YI', + /** Yoruba. */ + Yo = 'YO', + /** Chinese. */ + Zh = 'ZH', + /** Chinese (Simplified). */ + ZhCn = 'ZH_CN', + /** Chinese (Traditional). */ + ZhTw = 'ZH_TW', + /** Zulu. */ + Zu = 'ZU', +} + +/** Information about the localized experiences configured for the shop. */ +export type Localization = { + __typename?: 'Localization' + /** The list of countries with enabled localized experiences. */ + availableCountries: Array + /** The list of languages available for the active country. */ + availableLanguages: Array + /** The country of the active localized experience. Use the `@inContext` directive to change this value. */ + country: Country + /** The language of the active localized experience. Use the `@inContext` directive to change this value. */ + language: Language +} + +/** Represents a location where product inventory is held. */ +export type Location = Node & { + __typename?: 'Location' + /** The address of the location. */ + address: LocationAddress + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The name of the location. */ + name: Scalars['String'] +} + +/** + * Represents the address of a location. + * + */ +export type LocationAddress = { + __typename?: 'LocationAddress' + /** The first line of the address for the location. */ + address1?: Maybe + /** The second line of the address for the location. */ + address2?: Maybe + /** The city of the location. */ + city?: Maybe + /** The country of the location. */ + country?: Maybe + /** The country code of the location. */ + countryCode?: Maybe + /** A formatted version of the address for the location. */ + formatted: Array + /** The latitude coordinates of the location. */ + latitude?: Maybe + /** The longitude coordinates of the location. */ + longitude?: Maybe + /** The phone number of the location. */ + phone?: Maybe + /** The province of the location. */ + province?: Maybe + /** + * The code for the province, state, or district of the address of the location. + * + */ + provinceCode?: Maybe + /** The ZIP code of the location. */ + zip?: Maybe +} + +/** + * An auto-generated type for paginating through multiple Locations. + * + */ +export type LocationConnection = { + __typename?: 'LocationConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in LocationEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one Location and a cursor during pagination. + * + */ +export type LocationEdge = { + __typename?: 'LocationEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of LocationEdge. */ + node: Location +} + +/** The set of valid sort keys for the Location query. */ +export enum LocationSortKeys { + /** Sort by the `city` value. */ + City = 'CITY', + /** Sort by the `distance` value. */ + Distance = 'DISTANCE', + /** Sort by the `id` value. */ + Id = 'ID', + /** Sort by the `name` value. */ + Name = 'NAME', +} + /** Represents a mailing address for customers and shipping. */ export type MailingAddress = Node & { __typename?: 'MailingAddress' /** The first line of the address. Typically the street address or PO Box number. */ address1?: Maybe - /** The second line of the address. Typically the number of the apartment, suite, or unit. */ + /** + * The second line of the address. Typically the number of the apartment, suite, or unit. + * + */ address2?: Maybe - /** The name of the city, district, village, or town. */ + /** + * The name of the city, district, village, or town. + * + */ city?: Maybe - /** The name of the customer's company or organization. */ + /** + * The name of the customer's company or organization. + * + */ company?: Maybe - /** The name of the country. */ + /** + * The name of the country. + * + */ country?: Maybe /** * The two-letter code for the country of the address. * * For example, US. - * @deprecated Use `countryCodeV2` instead + * + * @deprecated Use `countryCodeV2` instead. */ countryCode?: Maybe /** * The two-letter code for the country of the address. * * For example, US. + * */ countryCodeV2?: Maybe /** The first name of the customer. */ @@ -2798,7 +3850,7 @@ export type MailingAddress = Node & { formatted: Array /** A comma-separated list of the values for city, province, and country. */ formattedArea?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The last name of the customer. */ lastName?: Maybe @@ -2806,12 +3858,16 @@ export type MailingAddress = Node & { latitude?: Maybe /** The longitude coordinate of the customer address. */ longitude?: Maybe - /** The full name of the customer, based on firstName and lastName. */ + /** + * The full name of the customer, based on firstName and lastName. + * + */ name?: Maybe /** * A unique phone number for the customer. * * Formatted using E.164 standard. For example, _+16135551111_. + * */ phone?: Maybe /** The region of the address, such as the province, state, or district. */ @@ -2820,6 +3876,7 @@ export type MailingAddress = Node & { * The two-letter code for the region. * * For example, ON. + * */ provinceCode?: Maybe /** The zip or postal code of the address. */ @@ -2828,20 +3885,28 @@ export type MailingAddress = Node & { /** Represents a mailing address for customers and shipping. */ export type MailingAddressFormattedArgs = { - withName?: Maybe - withCompany?: Maybe + withCompany?: InputMaybe + withName?: InputMaybe } -/** An auto-generated type for paginating through multiple MailingAddresses. */ +/** + * An auto-generated type for paginating through multiple MailingAddresses. + * + */ export type MailingAddressConnection = { __typename?: 'MailingAddressConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in MailingAddressEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one MailingAddress and a cursor during pagination. */ +/** + * An auto-generated type which holds one MailingAddress and a cursor during pagination. + * + */ export type MailingAddressEdge = { __typename?: 'MailingAddressEdge' /** A cursor for use in pagination. */ @@ -2852,33 +3917,49 @@ export type MailingAddressEdge = { /** Specifies the fields accepted to create or update a mailing address. */ export type MailingAddressInput = { - /** The first line of the address. Typically the street address or PO Box number. */ - address1?: Maybe - /** The second line of the address. Typically the number of the apartment, suite, or unit. */ - address2?: Maybe - /** The name of the city, district, village, or town. */ - city?: Maybe - /** The name of the customer's company or organization. */ - company?: Maybe + /** + * The first line of the address. Typically the street address or PO Box number. + * + */ + address1?: InputMaybe + /** + * The second line of the address. Typically the number of the apartment, suite, or unit. + * + */ + address2?: InputMaybe + /** + * The name of the city, district, village, or town. + * + */ + city?: InputMaybe + /** + * The name of the customer's company or organization. + * + */ + company?: InputMaybe /** The name of the country. */ - country?: Maybe + country?: InputMaybe /** The first name of the customer. */ - firstName?: Maybe + firstName?: InputMaybe /** The last name of the customer. */ - lastName?: Maybe + lastName?: InputMaybe /** * A unique phone number for the customer. * * Formatted using E.164 standard. For example, _+16135551111_. + * */ - phone?: Maybe + phone?: InputMaybe /** The region of the address, such as the province, state, or district. */ - province?: Maybe + province?: InputMaybe /** The zip or postal code of the address. */ - zip?: Maybe + zip?: InputMaybe } -/** Manual discount applications capture the intentions of a discount that was manually created. */ +/** + * Manual discount applications capture the intentions of a discount that was manually created. + * + */ export type ManualDiscountApplication = DiscountApplication & { __typename?: 'ManualDiscountApplication' /** The method by which the discount's value is allocated to its entitled items. */ @@ -2905,11 +3986,16 @@ export type Media = { previewImage?: Maybe } -/** An auto-generated type for paginating through multiple Media. */ +/** + * An auto-generated type for paginating through multiple Media. + * + */ export type MediaConnection = { __typename?: 'MediaConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in MediaEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } @@ -2926,7 +4012,10 @@ export enum MediaContentType { Video = 'VIDEO', } -/** An auto-generated type which holds one Media and a cursor during pagination. */ +/** + * An auto-generated type which holds one Media and a cursor during pagination. + * + */ export type MediaEdge = { __typename?: 'MediaEdge' /** A cursor for use in pagination. */ @@ -2935,13 +4024,21 @@ export type MediaEdge = { node: Media } +/** Host for a Media Resource. */ +export enum MediaHost { + /** Host for Vimeo embedded videos. */ + Vimeo = 'VIMEO', + /** Host for YouTube embedded videos. */ + Youtube = 'YOUTUBE', +} + /** Represents a Shopify hosted image. */ -export type MediaImage = Node & - Media & { +export type MediaImage = Media & + Node & { __typename?: 'MediaImage' /** A word or phrase to share the nature or contents of a media. */ alt?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The image for the media. */ image?: Maybe @@ -2951,9 +4048,79 @@ export type MediaImage = Node & previewImage?: Maybe } +/** + * A menu used for navigation within a storefront. + * + */ +export type Menu = Node & { + __typename?: 'Menu' + /** The menu's handle. */ + handle: Scalars['String'] + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The menu's child items. */ + items: Array + /** The count of items on the menu. */ + itemsCount: Scalars['Int'] + /** The menu's title. */ + title: Scalars['String'] +} + +/** + * A menu item within a parent menu. + * + */ +export type MenuItem = Node & { + __typename?: 'MenuItem' + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The menu item's child items. */ + items: Array + /** The ID of the linked resource. */ + resourceId?: Maybe + /** The menu item's tags to filter a collection. */ + tags: Array + /** The menu item's title. */ + title: Scalars['String'] + /** The menu item's type. */ + type: MenuItemType + /** The menu item's URL. */ + url?: Maybe +} + +/** A menu item type. */ +export enum MenuItemType { + /** An article link. */ + Article = 'ARTICLE', + /** A blog link. */ + Blog = 'BLOG', + /** A catalog link. */ + Catalog = 'CATALOG', + /** A collection link. */ + Collection = 'COLLECTION', + /** A collection link. */ + Collections = 'COLLECTIONS', + /** A frontpage link. */ + Frontpage = 'FRONTPAGE', + /** An http link. */ + Http = 'HTTP', + /** A page link. */ + Page = 'PAGE', + /** A product link. */ + Product = 'PRODUCT', + /** A search link. */ + Search = 'SEARCH', + /** A shop policy link. */ + ShopPolicy = 'SHOP_POLICY', +} + +/** The merchandise to be purchased at checkout. */ +export type Merchandise = ProductVariant + /** * Metafields represent custom metadata attached to a resource. Metafields can be sorted into namespaces and are * comprised of keys, values, and value types. + * */ export type Metafield = Node & { __typename?: 'Metafield' @@ -2961,7 +4128,7 @@ export type Metafield = Node & { createdAt: Scalars['DateTime'] /** The description of a metafield. */ description?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The key name for a metafield. */ key: Scalars['String'] @@ -2969,52 +4136,70 @@ export type Metafield = Node & { namespace: Scalars['String'] /** The parent object that the metafield belongs to. */ parentResource: MetafieldParentResource + /** Returns a reference object if the metafield definition's type is a resource reference. */ + reference?: Maybe + /** + * The type name of the metafield. + * See the list of [supported types](https://shopify.dev/apps/metafields/definitions/types). + * + */ + type: Scalars['String'] /** The date and time when the storefront metafield was updated. */ updatedAt: Scalars['DateTime'] /** The value of a metafield. */ value: Scalars['String'] - /** Represents the metafield value type. */ - valueType: MetafieldValueType } -/** An auto-generated type for paginating through multiple Metafields. */ -export type MetafieldConnection = { - __typename?: 'MetafieldConnection' - /** A list of edges. */ - edges: Array - /** Information to aid in pagination. */ - pageInfo: PageInfo -} - -/** An auto-generated type which holds one Metafield and a cursor during pagination. */ -export type MetafieldEdge = { - __typename?: 'MetafieldEdge' - /** A cursor for use in pagination. */ - cursor: Scalars['String'] - /** The item at the end of MetafieldEdge. */ - node: Metafield +/** + * A filter used to view a subset of products in a collection matching a specific metafield value. + * + * Only the following metafield types are currently supported: + * - `number_integer` + * - `number_decimal` + * - `single_line_text_field` + * - `boolean` as of 2022-04. + * + */ +export type MetafieldFilter = { + /** The key of the metafield to filter on. */ + key: Scalars['String'] + /** The namespace of the metafield to filter on. */ + namespace: Scalars['String'] + /** The value of the metafield. */ + value: Scalars['String'] } /** A resource that the metafield belongs to. */ -export type MetafieldParentResource = Product | ProductVariant +export type MetafieldParentResource = + | Article + | Blog + | Collection + | Customer + | Order + | Page + | Product + | ProductVariant + | Shop -/** Metafield value types. */ -export enum MetafieldValueType { - /** A string metafield. */ - String = 'STRING', - /** An integer metafield. */ - Integer = 'INTEGER', - /** A json string metafield. */ - JsonString = 'JSON_STRING', -} +/** + * Returns the resource which is being referred to by a metafield. + * + */ +export type MetafieldReference = + | GenericFile + | MediaImage + | Page + | Product + | ProductVariant + | Video /** Represents a Shopify hosted 3D model. */ -export type Model3d = Node & - Media & { +export type Model3d = Media & + Node & { __typename?: 'Model3d' /** A word or phrase to share the nature or contents of a media. */ alt?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The media content type. */ mediaContentType: MediaContentType @@ -3048,25 +4233,6 @@ export type MoneyInput = { /** * A monetary value with currency. * - * To format currencies, combine this type's amount and currencyCode fields with your client's locale. - * - * For example, in JavaScript you could use Intl.NumberFormat: - * - * ```js - * new Intl.NumberFormat(locale, { - * style: 'currency', - * currency: currencyCode - * }).format(amount); - * ``` - * - * Other formatting libraries include: - * - * * iOS - [NumberFormatter](https://developer.apple.com/documentation/foundation/numberformatter) - * * Android - [NumberFormat](https://developer.android.com/reference/java/text/NumberFormat.html) - * * PHP - [NumberFormatter](http://php.net/manual/en/class.numberformatter.php) - * - * For a more general solution, the [Unicode CLDR number formatting database] is available with many implementations - * (such as [TwitterCldr](https://github.com/twitter/twitter-cldr-rb)). */ export type MoneyV2 = { __typename?: 'MoneyV2' @@ -3076,97 +4242,51 @@ export type MoneyV2 = { currencyCode: CurrencyCode } -/** An auto-generated type for paginating through multiple MoneyV2s. */ -export type MoneyV2Connection = { - __typename?: 'MoneyV2Connection' - /** A list of edges. */ - edges: Array - /** Information to aid in pagination. */ - pageInfo: PageInfo -} - -/** An auto-generated type which holds one MoneyV2 and a cursor during pagination. */ -export type MoneyV2Edge = { - __typename?: 'MoneyV2Edge' - /** A cursor for use in pagination. */ - cursor: Scalars['String'] - /** The item at the end of MoneyV2Edge. */ - node: MoneyV2 -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type Mutation = { __typename?: 'Mutation' + /** Updates the attributes on a cart. */ + cartAttributesUpdate?: Maybe /** - * Updates the attributes of a checkout. - * @deprecated Use `checkoutAttributesUpdateV2` instead + * Updates customer information associated with a cart. + * Buyer identity is used to determine + * [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout) + * and should match the customer's shipping address. + * */ - checkoutAttributesUpdate?: Maybe - /** Updates the attributes of a checkout. */ + cartBuyerIdentityUpdate?: Maybe + /** Creates a new cart. */ + cartCreate?: Maybe + /** Updates the discount codes applied to the cart. */ + cartDiscountCodesUpdate?: Maybe + /** Adds a merchandise line to the cart. */ + cartLinesAdd?: Maybe + /** Removes one or more merchandise lines from the cart. */ + cartLinesRemove?: Maybe + /** Updates one or more merchandise lines on a cart. */ + cartLinesUpdate?: Maybe + /** Updates the note on the cart. */ + cartNoteUpdate?: Maybe + /** Updates the attributes of a checkout if `allowPartialAddresses` is `true`. */ checkoutAttributesUpdateV2?: Maybe /** Completes a checkout without providing payment information. You can use this mutation for free items or items whose purchase price is covered by a gift card. */ checkoutCompleteFree?: Maybe - /** - * Completes a checkout using a credit card token from Shopify's Vault. - * @deprecated Use `checkoutCompleteWithCreditCardV2` instead - */ - checkoutCompleteWithCreditCard?: Maybe - /** Completes a checkout using a credit card token from Shopify's card vault. Before you can complete checkouts using CheckoutCompleteWithCreditCardV2, you need to [_request payment processing_](https://help.shopify.com/api/guides/sales-channel-sdk/getting-started#request-payment-processing). */ + /** Completes a checkout using a credit card token from Shopify's card vault. Before you can complete checkouts using CheckoutCompleteWithCreditCardV2, you need to [_request payment processing_](https://shopify.dev/apps/channels/getting-started#request-payment-processing). */ checkoutCompleteWithCreditCardV2?: Maybe - /** - * Completes a checkout with a tokenized payment. - * @deprecated Use `checkoutCompleteWithTokenizedPaymentV2` instead - */ - checkoutCompleteWithTokenizedPayment?: Maybe - /** - * Completes a checkout with a tokenized payment. - * @deprecated Use `checkoutCompleteWithTokenizedPaymentV3` instead - */ - checkoutCompleteWithTokenizedPaymentV2?: Maybe /** Completes a checkout with a tokenized payment. */ checkoutCompleteWithTokenizedPaymentV3?: Maybe /** Creates a new checkout. */ checkoutCreate?: Maybe - /** - * Associates a customer to the checkout. - * @deprecated Use `checkoutCustomerAssociateV2` instead - */ - checkoutCustomerAssociate?: Maybe /** Associates a customer to the checkout. */ checkoutCustomerAssociateV2?: Maybe - /** - * Disassociates the current checkout customer from the checkout. - * @deprecated Use `checkoutCustomerDisassociateV2` instead - */ - checkoutCustomerDisassociate?: Maybe /** Disassociates the current checkout customer from the checkout. */ checkoutCustomerDisassociateV2?: Maybe - /** - * Applies a discount to an existing checkout using a discount code. - * @deprecated Use `checkoutDiscountCodeApplyV2` instead - */ - checkoutDiscountCodeApply?: Maybe /** Applies a discount to an existing checkout using a discount code. */ checkoutDiscountCodeApplyV2?: Maybe - /** Removes the applied discount from an existing checkout. */ + /** Removes the applied discounts from an existing checkout. */ checkoutDiscountCodeRemove?: Maybe - /** - * Updates the email on an existing checkout. - * @deprecated Use `checkoutEmailUpdateV2` instead - */ - checkoutEmailUpdate?: Maybe /** Updates the email on an existing checkout. */ checkoutEmailUpdateV2?: Maybe - /** - * Applies a gift card to an existing checkout using a gift card code. This will replace all currently applied gift cards. - * @deprecated Use `checkoutGiftCardsAppend` instead - */ - checkoutGiftCardApply?: Maybe - /** - * Removes an applied gift card from the checkout. - * @deprecated Use `checkoutGiftCardRemoveV2` instead - */ - checkoutGiftCardRemove?: Maybe /** Removes an applied gift card from the checkout. */ checkoutGiftCardRemoveV2?: Maybe /** Appends gift cards to an existing checkout. */ @@ -3179,11 +4299,6 @@ export type Mutation = { checkoutLineItemsReplace?: Maybe /** Updates line items on a checkout. */ checkoutLineItemsUpdate?: Maybe - /** - * Updates the shipping address of an existing checkout. - * @deprecated Use `checkoutShippingAddressUpdateV2` instead - */ - checkoutShippingAddressUpdate?: Maybe /** Updates the shipping address of an existing checkout. */ checkoutShippingAddressUpdateV2?: Maybe /** Updates the shipping lines on an existing checkout. */ @@ -3191,12 +4306,15 @@ export type Mutation = { /** * Creates a customer access token. * The customer access token is required to modify the customer object in any way. + * */ customerAccessTokenCreate?: Maybe /** - * Creates a customer access token using a multipass token instead of email and password. - * A customer record is created if customer does not exist. If a customer record already - * exists but the record is disabled, then it's enabled. + * Creates a customer access token using a + * [multipass token](https://shopify.dev/api/multipass) instead of email and + * password. A customer record is created if the customer doesn't exist. If a customer + * record already exists but the record is disabled, then the customer record is enabled. + * */ customerAccessTokenCreateWithMultipass?: Maybe /** Permanently destroys a customer access token. */ @@ -3206,6 +4324,7 @@ export type Mutation = { * * Access token renewal must happen *before* a token expires. * If a token has already expired, a new one should be created instead via `customerAccessTokenCreate`. + * */ customerAccessTokenRenew?: Maybe /** Activates a customer. */ @@ -3222,20 +4341,70 @@ export type Mutation = { customerCreate?: Maybe /** Updates the default address of an existing customer. */ customerDefaultAddressUpdate?: Maybe - /** Sends a reset password email to the customer, as the first step in the reset password process. */ + /** + * "Sends a reset password email to the customer. The reset password email contains a reset password URL and token that you can pass to the [`customerResetByUrl`](https://shopify.dev/api/storefront/latest/mutations/customerResetByUrl) or [`customerReset`](https://shopify.dev/api/storefront/latest/mutations/customerReset) mutation to reset the customer password." + * + */ customerRecover?: Maybe - /** Resets a customer’s password with a token received from `CustomerRecover`. */ + /** + * "Resets a customer’s password with the token received from a reset password email. You can send a reset password email with the [`customerRecover`](https://shopify.dev/api/storefront/latest/mutations/customerRecover) mutation." + * + */ customerReset?: Maybe - /** Resets a customer’s password with the reset password url received from `CustomerRecover`. */ + /** + * "Resets a customer’s password with the reset password URL received from a reset password email. You can send a reset password email with the [`customerRecover`](https://shopify.dev/api/storefront/latest/mutations/customerRecover) mutation." + * + */ customerResetByUrl?: Maybe /** Updates an existing customer. */ customerUpdate?: Maybe } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutAttributesUpdateArgs = { - checkoutId: Scalars['ID'] - input: CheckoutAttributesUpdateInput +export type MutationCartAttributesUpdateArgs = { + attributes: Array + cartId: Scalars['ID'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartBuyerIdentityUpdateArgs = { + buyerIdentity: CartBuyerIdentityInput + cartId: Scalars['ID'] +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartCreateArgs = { + input?: InputMaybe +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartDiscountCodesUpdateArgs = { + cartId: Scalars['ID'] + discountCodes?: InputMaybe> +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartLinesAddArgs = { + cartId: Scalars['ID'] + lines: Array +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartLinesRemoveArgs = { + cartId: Scalars['ID'] + lineIds: Array +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartLinesUpdateArgs = { + cartId: Scalars['ID'] + lines: Array +} + +/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ +export type MutationCartNoteUpdateArgs = { + cartId: Scalars['ID'] + note?: InputMaybe } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3249,30 +4418,12 @@ export type MutationCheckoutCompleteFreeArgs = { checkoutId: Scalars['ID'] } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutCompleteWithCreditCardArgs = { - checkoutId: Scalars['ID'] - payment: CreditCardPaymentInput -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutCompleteWithCreditCardV2Args = { checkoutId: Scalars['ID'] payment: CreditCardPaymentInputV2 } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutCompleteWithTokenizedPaymentArgs = { - checkoutId: Scalars['ID'] - payment: TokenizedPaymentInput -} - -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutCompleteWithTokenizedPaymentV2Args = { - checkoutId: Scalars['ID'] - payment: TokenizedPaymentInputV2 -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutCompleteWithTokenizedPaymentV3Args = { checkoutId: Scalars['ID'] @@ -3282,12 +4433,7 @@ export type MutationCheckoutCompleteWithTokenizedPaymentV3Args = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutCreateArgs = { input: CheckoutCreateInput -} - -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutCustomerAssociateArgs = { - checkoutId: Scalars['ID'] - customerAccessToken: Scalars['String'] + queueToken?: InputMaybe } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3296,26 +4442,15 @@ export type MutationCheckoutCustomerAssociateV2Args = { customerAccessToken: Scalars['String'] } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutCustomerDisassociateArgs = { - checkoutId: Scalars['ID'] -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutCustomerDisassociateV2Args = { checkoutId: Scalars['ID'] } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutDiscountCodeApplyArgs = { - discountCode: Scalars['String'] - checkoutId: Scalars['ID'] -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutDiscountCodeApplyV2Args = { - discountCode: Scalars['String'] checkoutId: Scalars['ID'] + discountCode: Scalars['String'] } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3323,30 +4458,12 @@ export type MutationCheckoutDiscountCodeRemoveArgs = { checkoutId: Scalars['ID'] } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutEmailUpdateArgs = { - checkoutId: Scalars['ID'] - email: Scalars['String'] -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutEmailUpdateV2Args = { checkoutId: Scalars['ID'] email: Scalars['String'] } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutGiftCardApplyArgs = { - giftCardCode: Scalars['String'] - checkoutId: Scalars['ID'] -} - -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutGiftCardRemoveArgs = { - appliedGiftCardId: Scalars['ID'] - checkoutId: Scalars['ID'] -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutGiftCardRemoveV2Args = { appliedGiftCardId: Scalars['ID'] @@ -3355,14 +4472,14 @@ export type MutationCheckoutGiftCardRemoveV2Args = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutGiftCardsAppendArgs = { - giftCardCodes: Array checkoutId: Scalars['ID'] + giftCardCodes: Array } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutLineItemsAddArgs = { - lineItems: Array checkoutId: Scalars['ID'] + lineItems: Array } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3373,8 +4490,8 @@ export type MutationCheckoutLineItemsRemoveArgs = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutLineItemsReplaceArgs = { - lineItems: Array checkoutId: Scalars['ID'] + lineItems: Array } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3383,16 +4500,10 @@ export type MutationCheckoutLineItemsUpdateArgs = { lineItems: Array } -/** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ -export type MutationCheckoutShippingAddressUpdateArgs = { - shippingAddress: MailingAddressInput - checkoutId: Scalars['ID'] -} - /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCheckoutShippingAddressUpdateV2Args = { - shippingAddress: MailingAddressInput checkoutId: Scalars['ID'] + shippingAddress: MailingAddressInput } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3435,21 +4546,21 @@ export type MutationCustomerActivateByUrlArgs = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerAddressCreateArgs = { - customerAccessToken: Scalars['String'] address: MailingAddressInput + customerAccessToken: Scalars['String'] } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerAddressDeleteArgs = { - id: Scalars['ID'] customerAccessToken: Scalars['String'] + id: Scalars['ID'] } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerAddressUpdateArgs = { + address: MailingAddressInput customerAccessToken: Scalars['String'] id: Scalars['ID'] - address: MailingAddressInput } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3459,8 +4570,8 @@ export type MutationCustomerCreateArgs = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerDefaultAddressUpdateArgs = { - customerAccessToken: Scalars['String'] addressId: Scalars['ID'] + customerAccessToken: Scalars['String'] } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ @@ -3476,164 +4587,212 @@ export type MutationCustomerResetArgs = { /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerResetByUrlArgs = { - resetUrl: Scalars['URL'] password: Scalars['String'] + resetUrl: Scalars['URL'] } /** The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. */ export type MutationCustomerUpdateArgs = { - customerAccessToken: Scalars['String'] customer: CustomerUpdateInput + customerAccessToken: Scalars['String'] } -/** An object with an ID to support global identification. */ +/** + * An object with an ID field to support global identification, in accordance with the + * [Relay specification](https://relay.dev/graphql/objectidentification.htm#sec-Node-Interface). + * This interface is used by the [node](https://shopify.dev/api/admin-graphql/unstable/queries/node) + * and [nodes](https://shopify.dev/api/admin-graphql/unstable/queries/nodes) queries. + * + */ export type Node = { - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] } +/** Represents a resource that can be published to the Online Store sales channel. */ +export type OnlineStorePublishable = { + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ + onlineStoreUrl?: Maybe +} + /** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ -export type Order = Node & { - __typename?: 'Order' - /** The reason for the order's cancellation. Returns `null` if the order wasn't canceled. */ - cancelReason?: Maybe - /** The date and time when the order was canceled. Returns null if the order wasn't canceled. */ - canceledAt?: Maybe - /** The code of the currency used for the payment. */ - currencyCode: CurrencyCode - /** The subtotal of line items and their discounts, excluding line items that have been removed. Does not contain order-level discounts, duties, shipping costs, or shipping discounts. Taxes are not included unless the order is a taxes-included order. */ - currentSubtotalPrice: MoneyV2 - /** The total amount of the order, including duties, taxes and discounts, minus amounts for line items that have been removed. */ - currentTotalPrice: MoneyV2 - /** The total of all taxes applied to the order, excluding taxes for returned line items. */ - currentTotalTax: MoneyV2 - /** The locale code in which this specific order happened. */ - customerLocale?: Maybe - /** The unique URL that the customer can use to access the order. */ - customerUrl?: Maybe - /** Discounts that have been applied on the order. */ - discountApplications: DiscountApplicationConnection - /** Whether the order has had any edits applied or not. */ - edited: Scalars['Boolean'] - /** The customer's email address. */ - email?: Maybe - /** The financial status of the order. */ - financialStatus?: Maybe - /** The fulfillment status for the order. */ - fulfillmentStatus: OrderFulfillmentStatus - /** Globally unique identifier. */ - id: Scalars['ID'] - /** List of the order’s line items. */ - lineItems: OrderLineItemConnection - /** - * Unique identifier for the order that appears on the order. - * For example, _#1000_ or _Store1001. - */ - name: Scalars['String'] - /** A unique numeric identifier for the order for use by shop owner and customer. */ - orderNumber: Scalars['Int'] - /** The total price of the order before any applied edits. */ - originalTotalPrice: MoneyV2 - /** The customer's phone number for receiving SMS notifications. */ - phone?: Maybe - /** - * The date and time when the order was imported. - * This value can be set to dates in the past when importing from other systems. - * If no value is provided, it will be auto-generated based on current date and time. - */ - processedAt: Scalars['DateTime'] - /** The address to where the order will be shipped. */ - shippingAddress?: Maybe - /** The discounts that have been allocated onto the shipping line by discount applications. */ - shippingDiscountAllocations: Array - /** The unique URL for the order's status page. */ - statusUrl: Scalars['URL'] - /** - * Price of the order before shipping and taxes. - * @deprecated Use `subtotalPriceV2` instead - */ - subtotalPrice?: Maybe - /** Price of the order before duties, shipping and taxes. */ - subtotalPriceV2?: Maybe - /** List of the order’s successful fulfillments. */ - successfulFulfillments?: Maybe> - /** - * The sum of all the prices of all the items in the order, taxes and discounts included (must be positive). - * @deprecated Use `totalPriceV2` instead - */ - totalPrice: Scalars['Money'] - /** The sum of all the prices of all the items in the order, duties, taxes and discounts included (must be positive). */ - totalPriceV2: MoneyV2 - /** - * The total amount that has been refunded. - * @deprecated Use `totalRefundedV2` instead - */ - totalRefunded: Scalars['Money'] - /** The total amount that has been refunded. */ - totalRefundedV2: MoneyV2 - /** - * The total cost of shipping. - * @deprecated Use `totalShippingPriceV2` instead - */ - totalShippingPrice: Scalars['Money'] - /** The total cost of shipping. */ - totalShippingPriceV2: MoneyV2 - /** - * The total cost of taxes. - * @deprecated Use `totalTaxV2` instead - */ - totalTax?: Maybe - /** The total cost of taxes. */ - totalTaxV2?: Maybe -} +export type Order = HasMetafields & + Node & { + __typename?: 'Order' + /** The reason for the order's cancellation. Returns `null` if the order wasn't canceled. */ + cancelReason?: Maybe + /** The date and time when the order was canceled. Returns null if the order wasn't canceled. */ + canceledAt?: Maybe + /** The code of the currency used for the payment. */ + currencyCode: CurrencyCode + /** The subtotal of line items and their discounts, excluding line items that have been removed. Does not contain order-level discounts, duties, shipping costs, or shipping discounts. Taxes are not included unless the order is a taxes-included order. */ + currentSubtotalPrice: MoneyV2 + /** The total cost of duties for the order, including refunds. */ + currentTotalDuties?: Maybe + /** The total amount of the order, including duties, taxes and discounts, minus amounts for line items that have been removed. */ + currentTotalPrice: MoneyV2 + /** The total of all taxes applied to the order, excluding taxes for returned line items. */ + currentTotalTax: MoneyV2 + /** The locale code in which this specific order happened. */ + customerLocale?: Maybe + /** The unique URL that the customer can use to access the order. */ + customerUrl?: Maybe + /** Discounts that have been applied on the order. */ + discountApplications: DiscountApplicationConnection + /** Whether the order has had any edits applied or not. */ + edited: Scalars['Boolean'] + /** The customer's email address. */ + email?: Maybe + /** The financial status of the order. */ + financialStatus?: Maybe + /** The fulfillment status for the order. */ + fulfillmentStatus: OrderFulfillmentStatus + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** List of the order’s line items. */ + lineItems: OrderLineItemConnection + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** + * Unique identifier for the order that appears on the order. + * For example, _#1000_ or _Store1001. + * + */ + name: Scalars['String'] + /** A unique numeric identifier for the order for use by shop owner and customer. */ + orderNumber: Scalars['Int'] + /** The total cost of duties charged at checkout. */ + originalTotalDuties?: Maybe + /** The total price of the order before any applied edits. */ + originalTotalPrice: MoneyV2 + /** The customer's phone number for receiving SMS notifications. */ + phone?: Maybe + /** + * The date and time when the order was imported. + * This value can be set to dates in the past when importing from other systems. + * If no value is provided, it will be auto-generated based on current date and time. + * + */ + processedAt: Scalars['DateTime'] + /** The address to where the order will be shipped. */ + shippingAddress?: Maybe + /** + * The discounts that have been allocated onto the shipping line by discount applications. + * + */ + shippingDiscountAllocations: Array + /** The unique URL for the order's status page. */ + statusUrl: Scalars['URL'] + /** + * Price of the order before shipping and taxes. + * @deprecated Use `subtotalPriceV2` instead. + */ + subtotalPrice?: Maybe + /** Price of the order before duties, shipping and taxes. */ + subtotalPriceV2?: Maybe + /** List of the order’s successful fulfillments. */ + successfulFulfillments?: Maybe> + /** + * The sum of all the prices of all the items in the order, taxes and discounts included (must be positive). + * @deprecated Use `totalPriceV2` instead. + */ + totalPrice: Scalars['Money'] + /** The sum of all the prices of all the items in the order, duties, taxes and discounts included (must be positive). */ + totalPriceV2: MoneyV2 + /** + * The total amount that has been refunded. + * @deprecated Use `totalRefundedV2` instead. + */ + totalRefunded: Scalars['Money'] + /** The total amount that has been refunded. */ + totalRefundedV2: MoneyV2 + /** + * The total cost of shipping. + * @deprecated Use `totalShippingPriceV2` instead. + */ + totalShippingPrice: Scalars['Money'] + /** The total cost of shipping. */ + totalShippingPriceV2: MoneyV2 + /** + * The total cost of taxes. + * @deprecated Use `totalTaxV2` instead. + */ + totalTax?: Maybe + /** The total cost of taxes. */ + totalTaxV2?: Maybe + } /** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ export type OrderDiscountApplicationsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ export type OrderLineItemsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ +export type OrderMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] +} + +/** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ +export type OrderMetafieldsArgs = { + identifiers: Array } /** An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. */ export type OrderSuccessfulFulfillmentsArgs = { - first?: Maybe + first?: InputMaybe } /** Represents the reason for the order's cancellation. */ export enum OrderCancelReason { /** The customer wanted to cancel the order. */ Customer = 'CUSTOMER', + /** Payment was declined. */ + Declined = 'DECLINED', /** The order was fraudulent. */ Fraud = 'FRAUD', /** There was insufficient inventory. */ Inventory = 'INVENTORY', - /** Payment was declined. */ - Declined = 'DECLINED', /** The order was canceled for an unlisted reason. */ Other = 'OTHER', } -/** An auto-generated type for paginating through multiple Orders. */ +/** + * An auto-generated type for paginating through multiple Orders. + * + */ export type OrderConnection = { __typename?: 'OrderConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in OrderEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Order and a cursor during pagination. */ +/** + * An auto-generated type which holds one Order and a cursor during pagination. + * + */ export type OrderEdge = { __typename?: 'OrderEdge' /** A cursor for use in pagination. */ @@ -3644,40 +4803,42 @@ export type OrderEdge = { /** Represents the order's current financial status. */ export enum OrderFinancialStatus { - /** Displayed as **Pending**. */ - Pending = 'PENDING', /** Displayed as **Authorized**. */ Authorized = 'AUTHORIZED', + /** Displayed as **Paid**. */ + Paid = 'PAID', /** Displayed as **Partially paid**. */ PartiallyPaid = 'PARTIALLY_PAID', /** Displayed as **Partially refunded**. */ PartiallyRefunded = 'PARTIALLY_REFUNDED', - /** Displayed as **Voided**. */ - Voided = 'VOIDED', - /** Displayed as **Paid**. */ - Paid = 'PAID', + /** Displayed as **Pending**. */ + Pending = 'PENDING', /** Displayed as **Refunded**. */ Refunded = 'REFUNDED', + /** Displayed as **Voided**. */ + Voided = 'VOIDED', } -/** Represents the order's current fulfillment status. */ +/** Represents the order's aggregated fulfillment status for display purposes. */ export enum OrderFulfillmentStatus { - /** Displayed as **Unfulfilled**. */ - Unfulfilled = 'UNFULFILLED', - /** Displayed as **Partially fulfilled**. */ - PartiallyFulfilled = 'PARTIALLY_FULFILLED', - /** Displayed as **Fulfilled**. */ + /** Displayed as **Fulfilled**. All of the items in the order have been fulfilled. */ Fulfilled = 'FULFILLED', - /** Displayed as **Restocked**. */ - Restocked = 'RESTOCKED', - /** Displayed as **Pending fulfillment**. */ - PendingFulfillment = 'PENDING_FULFILLMENT', - /** Displayed as **Open**. */ - Open = 'OPEN', - /** Displayed as **In progress**. */ + /** Displayed as **In progress**. Some of the items in the order have been fulfilled, or a request for fulfillment has been sent to the fulfillment service. */ InProgress = 'IN_PROGRESS', - /** Displayed as **Scheduled**. */ + /** Displayed as **On hold**. All of the unfulfilled items in this order are on hold. */ + OnHold = 'ON_HOLD', + /** Displayed as **Open**. None of the items in the order have been fulfilled. Replaced by "UNFULFILLED" status. */ + Open = 'OPEN', + /** Displayed as **Partially fulfilled**. Some of the items in the order have been fulfilled. */ + PartiallyFulfilled = 'PARTIALLY_FULFILLED', + /** Displayed as **Pending fulfillment**. A request for fulfillment of some items awaits a response from the fulfillment service. Replaced by "IN_PROGRESS" status. */ + PendingFulfillment = 'PENDING_FULFILLMENT', + /** Displayed as **Restocked**. All of the items in the order have been restocked. Replaced by "UNFULFILLED" status. */ + Restocked = 'RESTOCKED', + /** Displayed as **Scheduled**. All of the unfulfilled items in this order are scheduled for fulfillment at later time. */ Scheduled = 'SCHEDULED', + /** Displayed as **Unfulfilled**. None of the items in the order have been fulfilled. */ + Unfulfilled = 'UNFULFILLED', } /** Represents a single line in an order. There is one line item for each distinct product variant. */ @@ -3701,16 +4862,24 @@ export type OrderLineItem = { variant?: Maybe } -/** An auto-generated type for paginating through multiple OrderLineItems. */ +/** + * An auto-generated type for paginating through multiple OrderLineItems. + * + */ export type OrderLineItemConnection = { __typename?: 'OrderLineItemConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in OrderLineItemEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one OrderLineItem and a cursor during pagination. */ +/** + * An auto-generated type which holds one OrderLineItem and a cursor during pagination. + * + */ export type OrderLineItemEdge = { __typename?: 'OrderLineItemEdge' /** A cursor for use in pagination. */ @@ -3721,53 +4890,81 @@ export type OrderLineItemEdge = { /** The set of valid sort keys for the Order query. */ export enum OrderSortKeys { - /** Sort by the `processed_at` value. */ - ProcessedAt = 'PROCESSED_AT', - /** Sort by the `total_price` value. */ - TotalPrice = 'TOTAL_PRICE', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `processed_at` value. */ + ProcessedAt = 'PROCESSED_AT', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `total_price` value. */ + TotalPrice = 'TOTAL_PRICE', } /** Shopify merchants can create pages to hold static HTML content. Each Page object represents a custom page on the online store. */ -export type Page = Node & { - __typename?: 'Page' - /** The description of the page, complete with HTML formatting. */ - body: Scalars['HTML'] - /** Summary of the page body. */ - bodySummary: Scalars['String'] - /** The timestamp of the page creation. */ - createdAt: Scalars['DateTime'] - /** A human-friendly unique string for the page automatically generated from its title. */ - handle: Scalars['String'] - /** Globally unique identifier. */ - id: Scalars['ID'] - /** The page's SEO information. */ - seo?: Maybe - /** The title of the page. */ - title: Scalars['String'] - /** The timestamp of the latest page update. */ - updatedAt: Scalars['DateTime'] - /** The url pointing to the page accessible from the web. */ - url: Scalars['URL'] +export type Page = HasMetafields & + Node & + OnlineStorePublishable & { + __typename?: 'Page' + /** The description of the page, complete with HTML formatting. */ + body: Scalars['HTML'] + /** Summary of the page body. */ + bodySummary: Scalars['String'] + /** The timestamp of the page creation. */ + createdAt: Scalars['DateTime'] + /** A human-friendly unique string for the page automatically generated from its title. */ + handle: Scalars['String'] + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ + onlineStoreUrl?: Maybe + /** The page's SEO information. */ + seo?: Maybe + /** The title of the page. */ + title: Scalars['String'] + /** The timestamp of the latest page update. */ + updatedAt: Scalars['DateTime'] + } + +/** Shopify merchants can create pages to hold static HTML content. Each Page object represents a custom page on the online store. */ +export type PageMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] } -/** An auto-generated type for paginating through multiple Pages. */ +/** Shopify merchants can create pages to hold static HTML content. Each Page object represents a custom page on the online store. */ +export type PageMetafieldsArgs = { + identifiers: Array +} + +/** + * An auto-generated type for paginating through multiple Pages. + * + */ export type PageConnection = { __typename?: 'PageConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in PageEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Page and a cursor during pagination. */ +/** + * An auto-generated type which holds one Page and a cursor during pagination. + * + */ export type PageEdge = { __typename?: 'PageEdge' /** A cursor for use in pagination. */ @@ -3776,29 +4973,37 @@ export type PageEdge = { node: Page } -/** Information about pagination in a connection. */ +/** + * Returns information about pagination in a connection, in accordance with the + * [Relay specification](https://relay.dev/graphql/connections.htm#sec-undefined.PageInfo). + * + */ export type PageInfo = { __typename?: 'PageInfo' - /** Indicates if there are more pages to fetch. */ + /** The cursor corresponding to the last node in edges. */ + endCursor?: Maybe + /** Whether there are more pages to fetch following the current page. */ hasNextPage: Scalars['Boolean'] - /** Indicates if there are any pages prior to the current page. */ + /** Whether there are any pages prior to the current page. */ hasPreviousPage: Scalars['Boolean'] + /** The cursor corresponding to the first node in edges. */ + startCursor?: Maybe } /** The set of valid sort keys for the Page query. */ export enum PageSortKeys { + /** Sort by the `id` value. */ + Id = 'ID', + /** + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * + */ + Relevance = 'RELEVANCE', /** Sort by the `title` value. */ Title = 'TITLE', /** Sort by the `updated_at` value. */ UpdatedAt = 'UPDATED_AT', - /** Sort by the `id` value. */ - Id = 'ID', - /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. - */ - Relevance = 'RELEVANCE', } /** A payment applied to a checkout. */ @@ -3806,7 +5011,7 @@ export type Payment = Node & { __typename?: 'Payment' /** * The amount of the payment. - * @deprecated Use `amountV2` instead + * @deprecated Use `amountV2` instead. */ amount: Scalars['Money'] /** The amount of the payment. */ @@ -3819,17 +5024,18 @@ export type Payment = Node & { creditCard?: Maybe /** A message describing a processing error during asynchronous processing. */ errorMessage?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** * A client-side generated token to identify a payment and perform idempotent operations. * For more information, refer to - * [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). + * [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests). + * */ idempotencyKey?: Maybe /** The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow. */ nextActionUrl?: Maybe - /** Whether or not the payment is still processing asynchronously. */ + /** Whether the payment is still processing asynchronously. */ ready: Scalars['Boolean'] /** A flag to indicate if the payment is to be done in test mode for gateways that support it. */ test: Scalars['Boolean'] @@ -3860,12 +5066,22 @@ export type PaymentSettings = { export enum PaymentTokenType { /** Apple Pay token type. */ ApplePay = 'APPLE_PAY', - /** Vault payment token type. */ - Vault = 'VAULT', - /** Shopify Pay token type. */ - ShopifyPay = 'SHOPIFY_PAY', /** Google Pay token type. */ GooglePay = 'GOOGLE_PAY', + /** Shopify Pay token type. */ + ShopifyPay = 'SHOPIFY_PAY', + /** Stripe token type. */ + StripeVaultToken = 'STRIPE_VAULT_TOKEN', + /** Vault payment token type. */ + Vault = 'VAULT', +} + +/** A filter used to view a subset of products in a collection matching a specific price range. */ +export type PriceRangeFilter = { + /** The maximum price in the range. Empty indicates no max price. */ + max?: InputMaybe + /** The minimum price in the range. Defaults to zero. */ + min?: InputMaybe } /** The value of the percentage pricing object. */ @@ -3882,8 +5098,9 @@ export type PricingValue = MoneyV2 | PricingPercentageValue * A product represents an individual item for sale in a Shopify store. Products are often physical, but they don't have to be. * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ -export type Product = Node & - HasMetafields & { +export type Product = HasMetafields & + Node & + OnlineStorePublishable & { __typename?: 'Product' /** Indicates if at least one product variant is available for sale. */ availableForSale: Scalars['Boolean'] @@ -3897,41 +5114,52 @@ export type Product = Node & description: Scalars['String'] /** The description of the product, complete with HTML formatting. */ descriptionHtml: Scalars['HTML'] + /** + * The featured image for the product. + * + * This field is functionally equivalent to `images(first: 1)`. + * + */ + featuredImage?: Maybe /** * A human-friendly unique string for the Product automatically generated from its title. * They are used by the Liquid templating language to refer to objects. + * */ handle: Scalars['String'] - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** List of images associated with the product. */ images: ImageConnection /** The media associated with the product. */ media: MediaConnection - /** The metafield associated with the resource. */ + /** Returns a metafield found by namespace and key. */ metafield?: Maybe - /** A paginated list of metafields associated with the resource. */ - metafields: MetafieldConnection /** - * The online store URL for the product. - * A value of `null` indicates that the product is not published to the Online Store sales channel. + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * */ + metafields: Array> + /** The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. */ onlineStoreUrl?: Maybe /** List of product options. */ options: Array - /** List of price ranges in the presentment currencies for this shop. */ - presentmentPriceRanges: ProductPriceRangeConnection /** The price range. */ priceRange: ProductPriceRange /** A categorization that a product can be tagged with, commonly used for filtering and searching. */ productType: Scalars['String'] /** The date and time when the product was published to the channel. */ publishedAt: Scalars['DateTime'] + /** Whether the product can only be purchased with a selling plan. */ + requiresSellingPlan: Scalars['Boolean'] + /** A list of a product's available selling plan groups. A selling plan group represents a selling method. For example, 'Subscribe and save' is a selling method where customers pay for goods or services per delivery. A selling plan group contains individual selling plans. */ + sellingPlanGroups: SellingPlanGroupConnection /** The product's SEO information. */ seo: Seo /** * A comma separated list of tags that have been added to the product. * Additional access scope required for private apps: unauthenticated_read_product_tags. + * */ tags: Array /** The product’s title. */ @@ -3943,12 +5171,14 @@ export type Product = Node & * A product's `updatedAt` value can change for different reasons. For example, if an order * is placed for a product that has inventory tracking set up, then the inventory adjustment * is counted as an update. + * */ updatedAt: Scalars['DateTime'] /** * Find a product’s variant based on its selected options. * This is useful for converting a user’s selection of product options into a single matching variant. * If there is not a variant for the selected options, `null` will be returned. + * */ variantBySelectedOptions?: Maybe /** List of the product’s variants. */ @@ -3962,11 +5192,11 @@ export type Product = Node & * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductCollectionsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** @@ -3974,7 +5204,7 @@ export type ProductCollectionsArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductDescriptionArgs = { - truncateAt?: Maybe + truncateAt?: InputMaybe } /** @@ -3982,16 +5212,12 @@ export type ProductDescriptionArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductImagesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - maxWidth?: Maybe - maxHeight?: Maybe - crop?: Maybe - scale?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } /** @@ -3999,12 +5225,12 @@ export type ProductImagesArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductMediaArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } /** @@ -4012,8 +5238,8 @@ export type ProductMediaArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductMetafieldArgs = { - namespace: Scalars['String'] key: Scalars['String'] + namespace: Scalars['String'] } /** @@ -4021,12 +5247,7 @@ export type ProductMetafieldArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductMetafieldsArgs = { - namespace?: Maybe - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + identifiers: Array } /** @@ -4034,20 +5255,19 @@ export type ProductMetafieldsArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductOptionsArgs = { - first?: Maybe + first?: InputMaybe } /** * A product represents an individual item for sale in a Shopify store. Products are often physical, but they don't have to be. * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ -export type ProductPresentmentPriceRangesArgs = { - presentmentCurrencies?: Maybe> - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe +export type ProductSellingPlanGroupsArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** @@ -4063,48 +5283,58 @@ export type ProductVariantBySelectedOptionsArgs = { * For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). */ export type ProductVariantsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } /** The set of valid sort keys for the ProductCollection query. */ export enum ProductCollectionSortKeys { - /** Sort by the `title` value. */ - Title = 'TITLE', - /** Sort by the `price` value. */ - Price = 'PRICE', /** Sort by the `best-selling` value. */ BestSelling = 'BEST_SELLING', + /** Sort by the `collection-default` value. */ + CollectionDefault = 'COLLECTION_DEFAULT', /** Sort by the `created` value. */ Created = 'CREATED', /** Sort by the `id` value. */ Id = 'ID', /** Sort by the `manual` value. */ Manual = 'MANUAL', - /** Sort by the `collection-default` value. */ - CollectionDefault = 'COLLECTION_DEFAULT', + /** Sort by the `price` value. */ + Price = 'PRICE', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `title` value. */ + Title = 'TITLE', } -/** An auto-generated type for paginating through multiple Products. */ +/** + * An auto-generated type for paginating through multiple Products. + * + */ export type ProductConnection = { __typename?: 'ProductConnection' /** A list of edges. */ edges: Array + /** A list of available filters. */ + filters: Array + /** A list of the nodes contained in ProductEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one Product and a cursor during pagination. */ +/** + * An auto-generated type which holds one Product and a cursor during pagination. + * + */ export type ProductEdge = { __typename?: 'ProductEdge' /** A cursor for use in pagination. */ @@ -4113,32 +5343,50 @@ export type ProductEdge = { node: Product } +/** A filter used to view a subset of products in a collection. */ +export type ProductFilter = { + /** Filter on if the product is available for sale. */ + available?: InputMaybe + /** A range of prices to filter with-in. */ + price?: InputMaybe + /** A product metafield to filter on. */ + productMetafield?: InputMaybe + /** The product type to filter on. */ + productType?: InputMaybe + /** The product vendor to filter on. */ + productVendor?: InputMaybe + /** A variant metafield to filter on. */ + variantMetafield?: InputMaybe + /** A variant option to filter on. */ + variantOption?: InputMaybe +} + /** The set of valid sort keys for the ProductImage query. */ export enum ProductImageSortKeys { /** Sort by the `created_at` value. */ CreatedAt = 'CREATED_AT', - /** Sort by the `position` value. */ - Position = 'POSITION', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `position` value. */ + Position = 'POSITION', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', } /** The set of valid sort keys for the ProductMedia query. */ export enum ProductMediaSortKeys { - /** Sort by the `position` value. */ - Position = 'POSITION', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `position` value. */ + Position = 'POSITION', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', } @@ -4147,10 +5395,11 @@ export enum ProductMediaSortKeys { * Product property names like "Size", "Color", and "Material" that the customers can select. * Variants are selected based on permutations of these options. * 255 characters limit each. + * */ export type ProductOption = Node & { __typename?: 'ProductOption' - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The product option’s name. */ name: Scalars['String'] @@ -4167,85 +5416,66 @@ export type ProductPriceRange = { minVariantPrice: MoneyV2 } -/** An auto-generated type for paginating through multiple ProductPriceRanges. */ -export type ProductPriceRangeConnection = { - __typename?: 'ProductPriceRangeConnection' - /** A list of edges. */ - edges: Array - /** Information to aid in pagination. */ - pageInfo: PageInfo -} - -/** An auto-generated type which holds one ProductPriceRange and a cursor during pagination. */ -export type ProductPriceRangeEdge = { - __typename?: 'ProductPriceRangeEdge' - /** A cursor for use in pagination. */ - cursor: Scalars['String'] - /** The item at the end of ProductPriceRangeEdge. */ - node: ProductPriceRange -} - /** The set of valid sort keys for the Product query. */ export enum ProductSortKeys { - /** Sort by the `title` value. */ - Title = 'TITLE', - /** Sort by the `product_type` value. */ - ProductType = 'PRODUCT_TYPE', - /** Sort by the `vendor` value. */ - Vendor = 'VENDOR', - /** Sort by the `updated_at` value. */ - UpdatedAt = 'UPDATED_AT', - /** Sort by the `created_at` value. */ - CreatedAt = 'CREATED_AT', /** Sort by the `best_selling` value. */ BestSelling = 'BEST_SELLING', - /** Sort by the `price` value. */ - Price = 'PRICE', + /** Sort by the `created_at` value. */ + CreatedAt = 'CREATED_AT', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `price` value. */ + Price = 'PRICE', + /** Sort by the `product_type` value. */ + ProductType = 'PRODUCT_TYPE', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `title` value. */ + Title = 'TITLE', + /** Sort by the `updated_at` value. */ + UpdatedAt = 'UPDATED_AT', + /** Sort by the `vendor` value. */ + Vendor = 'VENDOR', } /** A product variant represents a different version of a product, such as differing sizes or differing colors. */ -export type ProductVariant = Node & - HasMetafields & { +export type ProductVariant = HasMetafields & + Node & { __typename?: 'ProductVariant' - /** - * Indicates if the product variant is in stock. - * @deprecated Use `availableForSale` instead - */ - available?: Maybe /** Indicates if the product variant is available for sale. */ availableForSale: Scalars['Boolean'] + /** The barcode (for example, ISBN, UPC, or GTIN) associated with the variant. */ + barcode?: Maybe /** * The compare at price of the variant. This can be used to mark a variant as on sale, when `compareAtPrice` is higher than `price`. - * @deprecated Use `compareAtPriceV2` instead + * @deprecated Use `compareAtPriceV2` instead. */ compareAtPrice?: Maybe /** The compare at price of the variant. This can be used to mark a variant as on sale, when `compareAtPriceV2` is higher than `priceV2`. */ compareAtPriceV2?: Maybe /** Whether a product is out of stock but still available for purchase (used for backorders). */ currentlyNotInStock: Scalars['Boolean'] - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] - /** Image associated with the product variant. This field falls back to the product image if no image is available. */ + /** + * Image associated with the product variant. This field falls back to the product image if no image is available. + * + */ image?: Maybe - /** The metafield associated with the resource. */ + /** Returns a metafield found by namespace and key. */ metafield?: Maybe - /** A paginated list of metafields associated with the resource. */ - metafields: MetafieldConnection - /** List of prices and compare-at prices in the presentment currencies for this shop. */ - presentmentPrices: ProductVariantPricePairConnection - /** List of unit prices in the presentment currencies for this shop. */ - presentmentUnitPrices: MoneyV2Connection + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> /** * The product variant’s price. - * @deprecated Use `priceV2` instead + * @deprecated Use `priceV2` instead. */ price: Scalars['Money'] /** The product variant’s price. */ @@ -4258,8 +5488,12 @@ export type ProductVariant = Node & requiresShipping: Scalars['Boolean'] /** List of product options applied to the variant. */ selectedOptions: Array + /** Represents an association between a variant and a selling plan. Selling plan allocations describe which selling plans are available for each variant, and what their impact is on pricing. */ + sellingPlanAllocations: SellingPlanAllocationConnection /** The SKU (stock keeping unit) associated with the variant. */ sku?: Maybe + /** The in-store pickup availability of this variant by location. */ + storeAvailability: StoreAvailabilityConnection /** The product variant’s title. */ title: Scalars['String'] /** The unit price value for the variant based on the variant's measurement. */ @@ -4272,60 +5506,53 @@ export type ProductVariant = Node & weightUnit: WeightUnit } -/** A product variant represents a different version of a product, such as differing sizes or differing colors. */ -export type ProductVariantImageArgs = { - maxWidth?: Maybe - maxHeight?: Maybe - crop?: Maybe - scale?: Maybe -} - /** A product variant represents a different version of a product, such as differing sizes or differing colors. */ export type ProductVariantMetafieldArgs = { - namespace: Scalars['String'] key: Scalars['String'] + namespace: Scalars['String'] } /** A product variant represents a different version of a product, such as differing sizes or differing colors. */ export type ProductVariantMetafieldsArgs = { - namespace?: Maybe - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe + identifiers: Array } /** A product variant represents a different version of a product, such as differing sizes or differing colors. */ -export type ProductVariantPresentmentPricesArgs = { - presentmentCurrencies?: Maybe> - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe +export type ProductVariantSellingPlanAllocationsArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** A product variant represents a different version of a product, such as differing sizes or differing colors. */ -export type ProductVariantPresentmentUnitPricesArgs = { - presentmentCurrencies?: Maybe> - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe +export type ProductVariantStoreAvailabilityArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } -/** An auto-generated type for paginating through multiple ProductVariants. */ +/** + * An auto-generated type for paginating through multiple ProductVariants. + * + */ export type ProductVariantConnection = { __typename?: 'ProductVariantConnection' /** A list of edges. */ edges: Array + /** A list of the nodes contained in ProductVariantEdge. */ + nodes: Array /** Information to aid in pagination. */ pageInfo: PageInfo } -/** An auto-generated type which holds one ProductVariant and a cursor during pagination. */ +/** + * An auto-generated type which holds one ProductVariant and a cursor during pagination. + * + */ export type ProductVariantEdge = { __typename?: 'ProductVariantEdge' /** A cursor for use in pagination. */ @@ -4334,49 +5561,22 @@ export type ProductVariantEdge = { node: ProductVariant } -/** The compare-at price and price of a variant sharing a currency. */ -export type ProductVariantPricePair = { - __typename?: 'ProductVariantPricePair' - /** The compare-at price of the variant with associated currency. */ - compareAtPrice?: Maybe - /** The price of the variant with associated currency. */ - price: MoneyV2 -} - -/** An auto-generated type for paginating through multiple ProductVariantPricePairs. */ -export type ProductVariantPricePairConnection = { - __typename?: 'ProductVariantPricePairConnection' - /** A list of edges. */ - edges: Array - /** Information to aid in pagination. */ - pageInfo: PageInfo -} - -/** An auto-generated type which holds one ProductVariantPricePair and a cursor during pagination. */ -export type ProductVariantPricePairEdge = { - __typename?: 'ProductVariantPricePairEdge' - /** A cursor for use in pagination. */ - cursor: Scalars['String'] - /** The item at the end of ProductVariantPricePairEdge. */ - node: ProductVariantPricePair -} - /** The set of valid sort keys for the ProductVariant query. */ export enum ProductVariantSortKeys { - /** Sort by the `title` value. */ - Title = 'TITLE', - /** Sort by the `sku` value. */ - Sku = 'SKU', - /** Sort by the `position` value. */ - Position = 'POSITION', /** Sort by the `id` value. */ Id = 'ID', + /** Sort by the `position` value. */ + Position = 'POSITION', /** - * During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - * results by relevance to the search term(s). When no search query is specified, this sort key is not - * deterministic and should not be used. + * Sort by relevance to the search terms when the `query` parameter is specified on the connection. + * Don't use this sort key when no search query is specified. + * */ Relevance = 'RELEVANCE', + /** Sort by the `sku` value. */ + Sku = 'SKU', + /** Sort by the `title` value. */ + Title = 'TITLE', } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ @@ -4384,35 +5584,70 @@ export type QueryRoot = { __typename?: 'QueryRoot' /** List of the shop's articles. */ articles: ArticleConnection - /** Find a blog by its handle. */ + /** Fetch a specific `Blog` by one of its unique attributes. */ + blog?: Maybe + /** + * Find a blog by its handle. + * @deprecated Use `blog` instead. + */ blogByHandle?: Maybe /** List of the shop's blogs. */ blogs: BlogConnection - /** Find a collection by its handle. */ + /** Retrieve a cart by its ID. For more information, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). */ + cart?: Maybe + /** Fetch a specific `Collection` by one of its unique attributes. */ + collection?: Maybe + /** + * Find a collection by its handle. + * @deprecated Use `collection` instead. + */ collectionByHandle?: Maybe /** List of the shop’s collections. */ collections: CollectionConnection /** Find a customer by its access token. */ customer?: Maybe + /** Returns the localized experiences configured for the shop. */ + localization: Localization + /** + * List of the shop's locations that support in-store pickup. + * + * When sorting by distance, you must specify a location via the `near` argument. + * + */ + locations: LocationConnection + /** A storefront menu. */ + menu?: Maybe /** Returns a specific node by ID. */ node?: Maybe /** Returns the list of nodes with the given IDs. */ nodes: Array> - /** Find a page by its handle. */ + /** Fetch a specific `Page` by one of its unique attributes. */ + page?: Maybe + /** + * Find a page by its handle. + * @deprecated Use `page` instead. + */ pageByHandle?: Maybe /** List of the shop's pages. */ pages: PageConnection - /** Find a product by its handle. */ + /** Fetch a specific `Product` by one of its unique attributes. */ + product?: Maybe + /** + * Find a product by its handle. + * @deprecated Use `product` instead. + */ productByHandle?: Maybe /** * Find recommended products related to a given `product_id`. * To learn more about how recommendations are generated, see * [*Showing product recommendations on product pages*](https://help.shopify.com/themes/development/recommended-products). + * */ productRecommendations?: Maybe> /** * Tags added to products. * Additional access scope required: unauthenticated_read_product_tags. + * */ productTags: StringConnection /** List of product types for the shop's products that are published to your app. */ @@ -4423,17 +5658,25 @@ export type QueryRoot = { publicApiVersions: Array /** The shop associated with the storefront access token. */ shop: Shop + /** A list of redirects for a shop. */ + urlRedirects: UrlRedirectConnection } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootArticlesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootBlogArgs = { + handle?: InputMaybe + id?: InputMaybe } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ @@ -4443,13 +5686,24 @@ export type QueryRootBlogByHandleArgs = { /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootBlogsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootCartArgs = { + id: Scalars['ID'] +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootCollectionArgs = { + handle?: InputMaybe + id?: InputMaybe } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ @@ -4459,13 +5713,13 @@ export type QueryRootCollectionByHandleArgs = { /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootCollectionsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ @@ -4473,6 +5727,22 @@ export type QueryRootCustomerArgs = { customerAccessToken: Scalars['String'] } +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootLocationsArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + near?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootMenuArgs = { + handle: Scalars['String'] +} + /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootNodeArgs = { id: Scalars['ID'] @@ -4483,6 +5753,12 @@ export type QueryRootNodesArgs = { ids: Array } +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootPageArgs = { + handle?: InputMaybe + id?: InputMaybe +} + /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootPageByHandleArgs = { handle: Scalars['String'] @@ -4490,13 +5766,19 @@ export type QueryRootPageByHandleArgs = { /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootPagesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootProductArgs = { + handle?: InputMaybe + id?: InputMaybe } /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ @@ -4521,13 +5803,22 @@ export type QueryRootProductTypesArgs = { /** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ export type QueryRootProductsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + query?: InputMaybe + reverse?: InputMaybe + sortKey?: InputMaybe +} + +/** The schema’s entry-point for queries. This acts as the public, top-level API from which all queries must start. */ +export type QueryRootUrlRedirectsArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe } /** SEO information. */ @@ -4542,16 +5833,12 @@ export type Seo = { /** * Script discount applications capture the intentions of a discount that * was created by a Shopify Script. + * */ export type ScriptDiscountApplication = DiscountApplication & { __typename?: 'ScriptDiscountApplication' /** The method by which the discount's value is allocated to its entitled items. */ allocationMethod: DiscountApplicationAllocationMethod - /** - * The description of the application as defined by the Script. - * @deprecated Use `title` instead - */ - description: Scalars['String'] /** Which lines of targetType that the discount is allocated over. */ targetSelection: DiscountApplicationTargetSelection /** The type of line that the discount is applicable towards. */ @@ -4565,6 +5852,7 @@ export type ScriptDiscountApplication = DiscountApplication & { /** * Properties used by customers to select a product variant. * Products can have multiple options, like different sizes or colors. + * */ export type SelectedOption = { __typename?: 'SelectedOption' @@ -4582,6 +5870,238 @@ export type SelectedOptionInput = { value: Scalars['String'] } +/** Represents how products and variants can be sold and purchased. */ +export type SellingPlan = { + __typename?: 'SellingPlan' + /** The initial payment due for the purchase. */ + checkoutCharge: SellingPlanCheckoutCharge + /** The description of the selling plan. */ + description?: Maybe + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** The name of the selling plan. For example, '6 weeks of prepaid granola, delivered weekly'. */ + name: Scalars['String'] + /** The selling plan options available in the drop-down list in the storefront. For example, 'Delivery every week' or 'Delivery every 2 weeks' specifies the delivery frequency options for the product. Individual selling plans contribute their options to the associated selling plan group. For example, a selling plan group might have an option called `option1: Delivery every`. One selling plan in that group could contribute `option1: 2 weeks` with the pricing for that option, and another selling plan could contribute `option1: 4 weeks`, with different pricing. */ + options: Array + /** The price adjustments that a selling plan makes when a variant is purchased with a selling plan. */ + priceAdjustments: Array + /** Whether purchasing the selling plan will result in multiple deliveries. */ + recurringDeliveries: Scalars['Boolean'] +} + +/** Represents an association between a variant and a selling plan. Selling plan allocations describe the options offered for each variant, and the price of the variant when purchased with a selling plan. */ +export type SellingPlanAllocation = { + __typename?: 'SellingPlanAllocation' + /** The checkout charge amount due for the purchase. */ + checkoutChargeAmount: MoneyV2 + /** A list of price adjustments, with a maximum of two. When there are two, the first price adjustment goes into effect at the time of purchase, while the second one starts after a certain number of orders. A price adjustment represents how a selling plan affects pricing when a variant is purchased with a selling plan. Prices display in the customer's currency if the shop is configured for it. */ + priceAdjustments: Array + /** The remaining balance charge amount due for the purchase. */ + remainingBalanceChargeAmount: MoneyV2 + /** A representation of how products and variants can be sold and purchased. For example, an individual selling plan could be '6 weeks of prepaid granola, delivered weekly'. */ + sellingPlan: SellingPlan +} + +/** + * An auto-generated type for paginating through multiple SellingPlanAllocations. + * + */ +export type SellingPlanAllocationConnection = { + __typename?: 'SellingPlanAllocationConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in SellingPlanAllocationEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one SellingPlanAllocation and a cursor during pagination. + * + */ +export type SellingPlanAllocationEdge = { + __typename?: 'SellingPlanAllocationEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of SellingPlanAllocationEdge. */ + node: SellingPlanAllocation +} + +/** The resulting prices for variants when they're purchased with a specific selling plan. */ +export type SellingPlanAllocationPriceAdjustment = { + __typename?: 'SellingPlanAllocationPriceAdjustment' + /** The price of the variant when it's purchased without a selling plan for the same number of deliveries. For example, if a customer purchases 6 deliveries of $10.00 granola separately, then the price is 6 x $10.00 = $60.00. */ + compareAtPrice: MoneyV2 + /** The effective price for a single delivery. For example, for a prepaid subscription plan that includes 6 deliveries at the price of $48.00, the per delivery price is $8.00. */ + perDeliveryPrice: MoneyV2 + /** The price of the variant when it's purchased with a selling plan For example, for a prepaid subscription plan that includes 6 deliveries of $10.00 granola, where the customer gets 20% off, the price is 6 x $10.00 x 0.80 = $48.00. */ + price: MoneyV2 + /** The resulting price per unit for the variant associated with the selling plan. If the variant isn't sold by quantity or measurement, then this field returns `null`. */ + unitPrice?: Maybe +} + +/** The initial payment due for the purchase. */ +export type SellingPlanCheckoutCharge = { + __typename?: 'SellingPlanCheckoutCharge' + /** The charge type for the checkout charge. */ + type: SellingPlanCheckoutChargeType + /** The charge value for the checkout charge. */ + value: SellingPlanCheckoutChargeValue +} + +/** The percentage value of the price used for checkout charge. */ +export type SellingPlanCheckoutChargePercentageValue = { + __typename?: 'SellingPlanCheckoutChargePercentageValue' + /** The percentage value of the price used for checkout charge. */ + percentage: Scalars['Float'] +} + +/** The checkout charge when the full amount isn't charged at checkout. */ +export enum SellingPlanCheckoutChargeType { + /** The checkout charge is a percentage of the product or variant price. */ + Percentage = 'PERCENTAGE', + /** The checkout charge is a fixed price amount. */ + Price = 'PRICE', +} + +/** The portion of the price to be charged at checkout. */ +export type SellingPlanCheckoutChargeValue = + | MoneyV2 + | SellingPlanCheckoutChargePercentageValue + +/** + * An auto-generated type for paginating through multiple SellingPlans. + * + */ +export type SellingPlanConnection = { + __typename?: 'SellingPlanConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in SellingPlanEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one SellingPlan and a cursor during pagination. + * + */ +export type SellingPlanEdge = { + __typename?: 'SellingPlanEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of SellingPlanEdge. */ + node: SellingPlan +} + +/** A fixed amount that's deducted from the original variant price. For example, $10.00 off. */ +export type SellingPlanFixedAmountPriceAdjustment = { + __typename?: 'SellingPlanFixedAmountPriceAdjustment' + /** The money value of the price adjustment. */ + adjustmentAmount: MoneyV2 +} + +/** A fixed price adjustment for a variant that's purchased with a selling plan. */ +export type SellingPlanFixedPriceAdjustment = { + __typename?: 'SellingPlanFixedPriceAdjustment' + /** A new price of the variant when it's purchased with the selling plan. */ + price: MoneyV2 +} + +/** Represents a selling method. For example, 'Subscribe and save' is a selling method where customers pay for goods or services per delivery. A selling plan group contains individual selling plans. */ +export type SellingPlanGroup = { + __typename?: 'SellingPlanGroup' + /** A display friendly name for the app that created the selling plan group. */ + appName?: Maybe + /** The name of the selling plan group. */ + name: Scalars['String'] + /** Represents the selling plan options available in the drop-down list in the storefront. For example, 'Delivery every week' or 'Delivery every 2 weeks' specifies the delivery frequency options for the product. */ + options: Array + /** A list of selling plans in a selling plan group. A selling plan is a representation of how products and variants can be sold and purchased. For example, an individual selling plan could be '6 weeks of prepaid granola, delivered weekly'. */ + sellingPlans: SellingPlanConnection +} + +/** Represents a selling method. For example, 'Subscribe and save' is a selling method where customers pay for goods or services per delivery. A selling plan group contains individual selling plans. */ +export type SellingPlanGroupSellingPlansArgs = { + after?: InputMaybe + before?: InputMaybe + first?: InputMaybe + last?: InputMaybe + reverse?: InputMaybe +} + +/** + * An auto-generated type for paginating through multiple SellingPlanGroups. + * + */ +export type SellingPlanGroupConnection = { + __typename?: 'SellingPlanGroupConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in SellingPlanGroupEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one SellingPlanGroup and a cursor during pagination. + * + */ +export type SellingPlanGroupEdge = { + __typename?: 'SellingPlanGroupEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of SellingPlanGroupEdge. */ + node: SellingPlanGroup +} + +/** + * Represents an option on a selling plan group that's available in the drop-down list in the storefront. + * + * Individual selling plans contribute their options to the associated selling plan group. For example, a selling plan group might have an option called `option1: Delivery every`. One selling plan in that group could contribute `option1: 2 weeks` with the pricing for that option, and another selling plan could contribute `option1: 4 weeks`, with different pricing. + */ +export type SellingPlanGroupOption = { + __typename?: 'SellingPlanGroupOption' + /** The name of the option. For example, 'Delivery every'. */ + name: Scalars['String'] + /** The values for the options specified by the selling plans in the selling plan group. For example, '1 week', '2 weeks', '3 weeks'. */ + values: Array +} + +/** An option provided by a Selling Plan. */ +export type SellingPlanOption = { + __typename?: 'SellingPlanOption' + /** The name of the option (ie "Delivery every"). */ + name?: Maybe + /** The value of the option (ie "Month"). */ + value?: Maybe +} + +/** A percentage amount that's deducted from the original variant price. For example, 10% off. */ +export type SellingPlanPercentagePriceAdjustment = { + __typename?: 'SellingPlanPercentagePriceAdjustment' + /** The percentage value of the price adjustment. */ + adjustmentPercentage: Scalars['Int'] +} + +/** Represents by how much the price of a variant associated with a selling plan is adjusted. Each variant can have up to two price adjustments. If a variant has multiple price adjustments, then the first price adjustment applies when the variant is initially purchased. The second price adjustment applies after a certain number of orders (specified by the `orderCount` field) are made. If a selling plan doesn't have any price adjustments, then the unadjusted price of the variant is the effective price. */ +export type SellingPlanPriceAdjustment = { + __typename?: 'SellingPlanPriceAdjustment' + /** The type of price adjustment. An adjustment value can have one of three types: percentage, amount off, or a new price. */ + adjustmentValue: SellingPlanPriceAdjustmentValue + /** The number of orders that the price adjustment applies to. If the price adjustment always applies, then this field is `null`. */ + orderCount?: Maybe +} + +/** Represents by how much the price of a variant associated with a selling plan is adjusted. Each variant can have up to two price adjustments. */ +export type SellingPlanPriceAdjustmentValue = + | SellingPlanFixedAmountPriceAdjustment + | SellingPlanFixedPriceAdjustment + | SellingPlanPercentagePriceAdjustment + /** A shipping rate to be applied to a checkout. */ export type ShippingRate = { __typename?: 'ShippingRate' @@ -4589,7 +6109,7 @@ export type ShippingRate = { handle: Scalars['String'] /** * Price of this shipping rate. - * @deprecated Use `priceV2` instead + * @deprecated Use `priceV2` instead. */ price: Scalars['Money'] /** Price of this shipping rate. */ @@ -4599,143 +6119,51 @@ export type ShippingRate = { } /** Shop represents a collection of the general settings and information about the shop. */ -export type Shop = { - __typename?: 'Shop' - /** - * List of the shop' articles. - * @deprecated Use `QueryRoot.articles` instead. - */ - articles: ArticleConnection - /** - * List of the shop' blogs. - * @deprecated Use `QueryRoot.blogs` instead. - */ - blogs: BlogConnection - /** - * Find a collection by its handle. - * @deprecated Use `QueryRoot.collectionByHandle` instead. - */ - collectionByHandle?: Maybe - /** - * List of the shop’s collections. - * @deprecated Use `QueryRoot.collections` instead. - */ - collections: CollectionConnection - /** - * The three-letter code for the currency that the shop accepts. - * @deprecated Use `paymentSettings` instead - */ - currencyCode: CurrencyCode - /** A description of the shop. */ - description?: Maybe - /** A string representing the way currency is formatted when the currency isn’t specified. */ - moneyFormat: Scalars['String'] - /** The shop’s name. */ - name: Scalars['String'] - /** Settings related to payments. */ - paymentSettings: PaymentSettings - /** The shop’s primary domain. */ - primaryDomain: Domain - /** The shop’s privacy policy. */ - privacyPolicy?: Maybe - /** - * Find a product by its handle. - * @deprecated Use `QueryRoot.productByHandle` instead. - */ - productByHandle?: Maybe - /** - * A list of tags that have been added to products. - * Additional access scope required: unauthenticated_read_product_tags. - * @deprecated Use `QueryRoot.productTags` instead. - */ - productTags: StringConnection - /** - * List of the shop’s product types. - * @deprecated Use `QueryRoot.productTypes` instead. - */ - productTypes: StringConnection - /** - * List of the shop’s products. - * @deprecated Use `QueryRoot.products` instead. - */ - products: ProductConnection - /** The shop’s refund policy. */ - refundPolicy?: Maybe - /** The shop’s shipping policy. */ - shippingPolicy?: Maybe - /** Countries that the shop ships to. */ - shipsToCountries: Array - /** - * The shop’s Shopify Payments account id. - * @deprecated Use `paymentSettings` instead - */ - shopifyPaymentsAccountId?: Maybe - /** The shop’s terms of service. */ - termsOfService?: Maybe +export type Shop = HasMetafields & + Node & { + __typename?: 'Shop' + /** A description of the shop. */ + description?: Maybe + /** A globally-unique identifier. */ + id: Scalars['ID'] + /** Returns a metafield found by namespace and key. */ + metafield?: Maybe + /** + * The metafields associated with the resource matching the supplied list of namespaces and keys. + * + */ + metafields: Array> + /** A string representing the way currency is formatted when the currency isn’t specified. */ + moneyFormat: Scalars['String'] + /** The shop’s name. */ + name: Scalars['String'] + /** Settings related to payments. */ + paymentSettings: PaymentSettings + /** The primary domain of the shop’s Online Store. */ + primaryDomain: Domain + /** The shop’s privacy policy. */ + privacyPolicy?: Maybe + /** The shop’s refund policy. */ + refundPolicy?: Maybe + /** The shop’s shipping policy. */ + shippingPolicy?: Maybe + /** Countries that the shop ships to. */ + shipsToCountries: Array + /** The shop’s subscription policy. */ + subscriptionPolicy?: Maybe + /** The shop’s terms of service. */ + termsOfService?: Maybe + } + +/** Shop represents a collection of the general settings and information about the shop. */ +export type ShopMetafieldArgs = { + key: Scalars['String'] + namespace: Scalars['String'] } /** Shop represents a collection of the general settings and information about the shop. */ -export type ShopArticlesArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopBlogsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopCollectionByHandleArgs = { - handle: Scalars['String'] -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopCollectionsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopProductByHandleArgs = { - handle: Scalars['String'] -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopProductTagsArgs = { - first: Scalars['Int'] -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopProductTypesArgs = { - first: Scalars['Int'] -} - -/** Shop represents a collection of the general settings and information about the shop. */ -export type ShopProductsArgs = { - first?: Maybe - after?: Maybe - last?: Maybe - before?: Maybe - reverse?: Maybe - sortKey?: Maybe - query?: Maybe +export type ShopMetafieldsArgs = { + identifiers: Array } /** Policy that a merchant has configured for their store, such as their refund or privacy policy. */ @@ -4745,7 +6173,7 @@ export type ShopPolicy = Node & { body: Scalars['String'] /** Policy’s handle. */ handle: Scalars['String'] - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** Policy’s title. */ title: Scalars['String'] @@ -4753,7 +6181,71 @@ export type ShopPolicy = Node & { url: Scalars['URL'] } -/** An auto-generated type for paginating through multiple Strings. */ +/** + * A policy for the store that comes with a default value, such as a subscription policy. + * If the merchant hasn't configured a policy for their store, then the policy will return the default value. + * Otherwise, the policy will return the merchant-configured value. + * + */ +export type ShopPolicyWithDefault = { + __typename?: 'ShopPolicyWithDefault' + /** The text of the policy. Maximum size: 64KB. */ + body: Scalars['String'] + /** The handle of the policy. */ + handle: Scalars['String'] + /** The unique identifier of the policy. A default policy doesn't have an ID. */ + id?: Maybe + /** The title of the policy. */ + title: Scalars['String'] + /** Public URL to the policy. */ + url: Scalars['URL'] +} + +/** + * The availability of a product variant at a particular location. + * Local pick-up must be enabled in the store's shipping settings, otherwise this will return an empty result. + * + */ +export type StoreAvailability = { + __typename?: 'StoreAvailability' + /** Whether the product variant is in-stock at this location. */ + available: Scalars['Boolean'] + /** The location where this product variant is stocked at. */ + location: Location + /** Returns the estimated amount of time it takes for pickup to be ready (Example: Usually ready in 24 hours). */ + pickUpTime: Scalars['String'] +} + +/** + * An auto-generated type for paginating through multiple StoreAvailabilities. + * + */ +export type StoreAvailabilityConnection = { + __typename?: 'StoreAvailabilityConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in StoreAvailabilityEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one StoreAvailability and a cursor during pagination. + * + */ +export type StoreAvailabilityEdge = { + __typename?: 'StoreAvailabilityEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of StoreAvailabilityEdge. */ + node: StoreAvailability +} + +/** + * An auto-generated type for paginating through a list of Strings. + * + */ export type StringConnection = { __typename?: 'StringConnection' /** A list of edges. */ @@ -4762,7 +6254,10 @@ export type StringConnection = { pageInfo: PageInfo } -/** An auto-generated type which holds one String and a cursor during pagination. */ +/** + * An auto-generated type which holds one String and a cursor during pagination. + * + */ export type StringEdge = { __typename?: 'StringEdge' /** A cursor for use in pagination. */ @@ -4774,62 +6269,21 @@ export type StringEdge = { /** * Specifies the fields required to complete a checkout with * a tokenized payment. - */ -export type TokenizedPaymentInput = { - /** The amount of the payment. */ - amount: Scalars['Money'] - /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). */ - idempotencyKey: Scalars['String'] - /** The billing address for the payment. */ - billingAddress: MailingAddressInput - /** The type of payment token. */ - type: Scalars['String'] - /** A simple string or JSON containing the required payment data for the tokenized payment. */ - paymentData: Scalars['String'] - /** Executes the payment in test mode if possible. Defaults to `false`. */ - test?: Maybe - /** Public Hash Key used for AndroidPay payments only. */ - identifier?: Maybe -} - -/** - * Specifies the fields required to complete a checkout with - * a tokenized payment. - */ -export type TokenizedPaymentInputV2 = { - /** The amount and currency of the payment. */ - paymentAmount: MoneyInput - /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). */ - idempotencyKey: Scalars['String'] - /** The billing address for the payment. */ - billingAddress: MailingAddressInput - /** A simple string or JSON containing the required payment data for the tokenized payment. */ - paymentData: Scalars['String'] - /** Whether to execute the payment in test mode, if possible. Test mode is not supported in production stores. Defaults to `false`. */ - test?: Maybe - /** Public Hash Key used for AndroidPay payments only. */ - identifier?: Maybe - /** The type of payment token. */ - type: Scalars['String'] -} - -/** - * Specifies the fields required to complete a checkout with - * a tokenized payment. + * */ export type TokenizedPaymentInputV3 = { - /** The amount and currency of the payment. */ - paymentAmount: MoneyInput - /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). */ - idempotencyKey: Scalars['String'] /** The billing address for the payment. */ billingAddress: MailingAddressInput + /** A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests). */ + idempotencyKey: Scalars['String'] + /** Public Hash Key used for AndroidPay payments only. */ + identifier?: InputMaybe + /** The amount and currency of the payment. */ + paymentAmount: MoneyInput /** A simple string or JSON containing the required payment data for the tokenized payment. */ paymentData: Scalars['String'] /** Whether to execute the payment in test mode, if possible. Test mode is not supported in production stores. Defaults to `false`. */ - test?: Maybe - /** Public Hash Key used for AndroidPay payments only. */ - identifier?: Maybe + test?: InputMaybe /** The type of payment token. */ type: PaymentTokenType } @@ -4839,7 +6293,7 @@ export type Transaction = { __typename?: 'Transaction' /** * The amount of money that the transaction was for. - * @deprecated Use `amountV2` instead + * @deprecated Use `amountV2` instead. */ amount: Scalars['Money'] /** The amount of money that the transaction was for. */ @@ -4848,7 +6302,7 @@ export type Transaction = { kind: TransactionKind /** * The status of the transaction. - * @deprecated Use `statusV2` instead + * @deprecated Use `statusV2` instead. */ status: TransactionStatus /** The status of the transaction. */ @@ -4859,34 +6313,38 @@ export type Transaction = { /** The different kinds of order transactions. */ export enum TransactionKind { - /** An authorization and capture performed together in a single step. */ - Sale = 'SALE', - /** A transfer of the money that was reserved during the authorization stage. */ - Capture = 'CAPTURE', /** * An amount reserved against the cardholder's funding source. * Money does not change hands until the authorization is captured. + * */ Authorization = 'AUTHORIZATION', - /** An authorization for a payment taken with an EMV credit card reader. */ - EmvAuthorization = 'EMV_AUTHORIZATION', + /** A transfer of the money that was reserved during the authorization stage. */ + Capture = 'CAPTURE', /** Money returned to the customer when they have paid too much. */ Change = 'CHANGE', + /** An authorization for a payment taken with an EMV credit card reader. */ + EmvAuthorization = 'EMV_AUTHORIZATION', + /** An authorization and capture performed together in a single step. */ + Sale = 'SALE', } /** Transaction statuses describe the status of a transaction. */ export enum TransactionStatus { + /** There was an error while processing the transaction. */ + Error = 'ERROR', + /** The transaction failed. */ + Failure = 'FAILURE', /** The transaction is pending. */ Pending = 'PENDING', /** The transaction succeeded. */ Success = 'SUCCESS', - /** The transaction failed. */ - Failure = 'FAILURE', - /** There was an error while processing the transaction. */ - Error = 'ERROR', } -/** The measurement used to calculate a unit price for a product variant (e.g. $9.99 / 100ml). */ +/** + * The measurement used to calculate a unit price for a product variant (e.g. $9.99 / 100ml). + * + */ export type UnitPriceMeasurement = { __typename?: 'UnitPriceMeasurement' /** The type of unit of measurement for the unit price measurement. */ @@ -4903,58 +6361,111 @@ export type UnitPriceMeasurement = { /** The accepted types of unit of measurement. */ export enum UnitPriceMeasurementMeasuredType { + /** Unit of measurements representing areas. */ + Area = 'AREA', + /** Unit of measurements representing lengths. */ + Length = 'LENGTH', /** Unit of measurements representing volumes. */ Volume = 'VOLUME', /** Unit of measurements representing weights. */ Weight = 'WEIGHT', - /** Unit of measurements representing lengths. */ - Length = 'LENGTH', - /** Unit of measurements representing areas. */ - Area = 'AREA', } /** The valid units of measurement for a unit price measurement. */ export enum UnitPriceMeasurementMeasuredUnit { - /** 1000 milliliters equals 1 liter. */ - Ml = 'ML', /** 100 centiliters equals 1 liter. */ Cl = 'CL', - /** Metric system unit of volume. */ - L = 'L', - /** 1 cubic meter equals 1000 liters. */ - M3 = 'M3', - /** 1000 milligrams equals 1 gram. */ - Mg = 'MG', + /** 100 centimeters equals 1 meter. */ + Cm = 'CM', /** Metric system unit of weight. */ G = 'G', /** 1 kilogram equals 1000 grams. */ Kg = 'KG', - /** 1000 millimeters equals 1 meter. */ - Mm = 'MM', - /** 100 centimeters equals 1 meter. */ - Cm = 'CM', + /** Metric system unit of volume. */ + L = 'L', /** Metric system unit of length. */ M = 'M', /** Metric system unit of area. */ M2 = 'M2', + /** 1 cubic meter equals 1000 liters. */ + M3 = 'M3', + /** 1000 milligrams equals 1 gram. */ + Mg = 'MG', + /** 1000 milliliters equals 1 liter. */ + Ml = 'ML', + /** 1000 millimeters equals 1 meter. */ + Mm = 'MM', +} + +/** Systems of weights and measures. */ +export enum UnitSystem { + /** Imperial system of weights and measures. */ + ImperialSystem = 'IMPERIAL_SYSTEM', + /** Metric system of weights and measures. */ + MetricSystem = 'METRIC_SYSTEM', +} + +/** A redirect on the online store. */ +export type UrlRedirect = Node & { + __typename?: 'UrlRedirect' + /** The ID of the URL redirect. */ + id: Scalars['ID'] + /** The old path to be redirected from. When the user visits this path, they'll be redirected to the target location. */ + path: Scalars['String'] + /** The target location where the user will be redirected to. */ + target: Scalars['String'] +} + +/** + * An auto-generated type for paginating through multiple UrlRedirects. + * + */ +export type UrlRedirectConnection = { + __typename?: 'UrlRedirectConnection' + /** A list of edges. */ + edges: Array + /** A list of the nodes contained in UrlRedirectEdge. */ + nodes: Array + /** Information to aid in pagination. */ + pageInfo: PageInfo +} + +/** + * An auto-generated type which holds one UrlRedirect and a cursor during pagination. + * + */ +export type UrlRedirectEdge = { + __typename?: 'UrlRedirectEdge' + /** A cursor for use in pagination. */ + cursor: Scalars['String'] + /** The item at the end of UrlRedirectEdge. */ + node: UrlRedirect } /** Represents an error in the input of a mutation. */ export type UserError = DisplayableError & { __typename?: 'UserError' - /** Path to the input field which caused the error. */ + /** The path to the input field that caused the error. */ field?: Maybe> /** The error message. */ message: Scalars['String'] } +/** A filter used to view a subset of products in a collection matching a specific variant option. */ +export type VariantOptionFilter = { + /** The name of the variant option to filter on. */ + name: Scalars['String'] + /** The value of the variant option to filter on. */ + value: Scalars['String'] +} + /** Represents a Shopify hosted video. */ -export type Video = Node & - Media & { +export type Video = Media & + Node & { __typename?: 'Video' /** A word or phrase to share the nature or contents of a media. */ alt?: Maybe - /** Globally unique identifier. */ + /** A globally-unique identifier. */ id: Scalars['ID'] /** The media content type. */ mediaContentType: MediaContentType @@ -4981,14 +6492,14 @@ export type VideoSource = { /** Units of measurement for weight. */ export enum WeightUnit { - /** 1 kilogram equals 1000 grams. */ - Kilograms = 'KILOGRAMS', /** Metric system unit of mass. */ Grams = 'GRAMS', - /** 1 pound equals 16 ounces. */ - Pounds = 'POUNDS', + /** 1 kilogram equals 1000 grams. */ + Kilograms = 'KILOGRAMS', /** Imperial system unit of mass. */ Ounces = 'OUNCES', + /** 1 pound equals 16 ounces. */ + Pounds = 'POUNDS', } export type AssociateCustomerWithCheckoutMutationVariables = Exact<{ @@ -4998,37 +6509,103 @@ export type AssociateCustomerWithCheckoutMutationVariables = Exact<{ export type AssociateCustomerWithCheckoutMutation = { __typename?: 'Mutation' -} & { - checkoutCustomerAssociateV2?: Maybe< - { __typename?: 'CheckoutCustomerAssociateV2Payload' } & { - checkout?: Maybe<{ __typename?: 'Checkout' } & Pick> - checkoutUserErrors: Array< - { __typename?: 'CheckoutUserError' } & Pick< - CheckoutUserError, - 'code' | 'field' | 'message' - > - > - customer?: Maybe<{ __typename?: 'Customer' } & Pick> - } - > + checkoutCustomerAssociateV2?: { + __typename?: 'CheckoutCustomerAssociateV2Payload' + checkout?: { __typename?: 'Checkout'; id: string } | null + checkoutUserErrors: Array<{ + __typename?: 'CheckoutUserError' + code?: CheckoutErrorCode | null + field?: Array | null + message: string + }> + customer?: { __typename?: 'Customer'; id: string } | null + } | null } export type CheckoutCreateMutationVariables = Exact<{ - input?: Maybe + input?: InputMaybe }> -export type CheckoutCreateMutation = { __typename?: 'Mutation' } & { - checkoutCreate?: Maybe< - { __typename?: 'CheckoutCreatePayload' } & { - checkoutUserErrors: Array< - { __typename?: 'CheckoutUserError' } & Pick< - CheckoutUserError, - 'code' | 'field' | 'message' - > - > - checkout?: Maybe<{ __typename?: 'Checkout' } & CheckoutDetailsFragment> - } - > +export type CheckoutCreateMutation = { + __typename?: 'Mutation' + checkoutCreate?: { + __typename?: 'CheckoutCreatePayload' + checkoutUserErrors: Array<{ + __typename?: 'CheckoutUserError' + code?: CheckoutErrorCode | null + field?: Array | null + message: string + }> + checkout?: { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } + } | null + } | null } export type CheckoutLineItemAddMutationVariables = Exact<{ @@ -5036,18 +6613,86 @@ export type CheckoutLineItemAddMutationVariables = Exact<{ lineItems: Array | CheckoutLineItemInput }> -export type CheckoutLineItemAddMutation = { __typename?: 'Mutation' } & { - checkoutLineItemsAdd?: Maybe< - { __typename?: 'CheckoutLineItemsAddPayload' } & { - checkoutUserErrors: Array< - { __typename?: 'CheckoutUserError' } & Pick< - CheckoutUserError, - 'code' | 'field' | 'message' - > - > - checkout?: Maybe<{ __typename?: 'Checkout' } & CheckoutDetailsFragment> - } - > +export type CheckoutLineItemAddMutation = { + __typename?: 'Mutation' + checkoutLineItemsAdd?: { + __typename?: 'CheckoutLineItemsAddPayload' + checkoutUserErrors: Array<{ + __typename?: 'CheckoutUserError' + code?: CheckoutErrorCode | null + field?: Array | null + message: string + }> + checkout?: { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } + } | null + } | null } export type CheckoutLineItemRemoveMutationVariables = Exact<{ @@ -5055,18 +6700,86 @@ export type CheckoutLineItemRemoveMutationVariables = Exact<{ lineItemIds: Array | Scalars['ID'] }> -export type CheckoutLineItemRemoveMutation = { __typename?: 'Mutation' } & { - checkoutLineItemsRemove?: Maybe< - { __typename?: 'CheckoutLineItemsRemovePayload' } & { - checkoutUserErrors: Array< - { __typename?: 'CheckoutUserError' } & Pick< - CheckoutUserError, - 'code' | 'field' | 'message' - > - > - checkout?: Maybe<{ __typename?: 'Checkout' } & CheckoutDetailsFragment> - } - > +export type CheckoutLineItemRemoveMutation = { + __typename?: 'Mutation' + checkoutLineItemsRemove?: { + __typename?: 'CheckoutLineItemsRemovePayload' + checkoutUserErrors: Array<{ + __typename?: 'CheckoutUserError' + code?: CheckoutErrorCode | null + field?: Array | null + message: string + }> + checkout?: { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } + } | null + } | null } export type CheckoutLineItemUpdateMutationVariables = Exact<{ @@ -5074,58 +6787,126 @@ export type CheckoutLineItemUpdateMutationVariables = Exact<{ lineItems: Array | CheckoutLineItemUpdateInput }> -export type CheckoutLineItemUpdateMutation = { __typename?: 'Mutation' } & { - checkoutLineItemsUpdate?: Maybe< - { __typename?: 'CheckoutLineItemsUpdatePayload' } & { - checkoutUserErrors: Array< - { __typename?: 'CheckoutUserError' } & Pick< - CheckoutUserError, - 'code' | 'field' | 'message' - > - > - checkout?: Maybe<{ __typename?: 'Checkout' } & CheckoutDetailsFragment> - } - > +export type CheckoutLineItemUpdateMutation = { + __typename?: 'Mutation' + checkoutLineItemsUpdate?: { + __typename?: 'CheckoutLineItemsUpdatePayload' + checkoutUserErrors: Array<{ + __typename?: 'CheckoutUserError' + code?: CheckoutErrorCode | null + field?: Array | null + message: string + }> + checkout?: { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } + } | null + } | null } export type CustomerAccessTokenCreateMutationVariables = Exact<{ input: CustomerAccessTokenCreateInput }> -export type CustomerAccessTokenCreateMutation = { __typename?: 'Mutation' } & { - customerAccessTokenCreate?: Maybe< - { __typename?: 'CustomerAccessTokenCreatePayload' } & { - customerAccessToken?: Maybe< - { __typename?: 'CustomerAccessToken' } & Pick< - CustomerAccessToken, - 'accessToken' | 'expiresAt' - > - > - customerUserErrors: Array< - { __typename?: 'CustomerUserError' } & Pick< - CustomerUserError, - 'code' | 'field' | 'message' - > - > - } - > +export type CustomerAccessTokenCreateMutation = { + __typename?: 'Mutation' + customerAccessTokenCreate?: { + __typename?: 'CustomerAccessTokenCreatePayload' + customerAccessToken?: { + __typename?: 'CustomerAccessToken' + accessToken: string + expiresAt: any + } | null + customerUserErrors: Array<{ + __typename?: 'CustomerUserError' + code?: CustomerErrorCode | null + field?: Array | null + message: string + }> + } | null } export type CustomerAccessTokenDeleteMutationVariables = Exact<{ customerAccessToken: Scalars['String'] }> -export type CustomerAccessTokenDeleteMutation = { __typename?: 'Mutation' } & { - customerAccessTokenDelete?: Maybe< - { __typename?: 'CustomerAccessTokenDeletePayload' } & Pick< - CustomerAccessTokenDeletePayload, - 'deletedAccessToken' | 'deletedCustomerAccessTokenId' - > & { - userErrors: Array< - { __typename?: 'UserError' } & Pick - > - } - > +export type CustomerAccessTokenDeleteMutation = { + __typename?: 'Mutation' + customerAccessTokenDelete?: { + __typename?: 'CustomerAccessTokenDeletePayload' + deletedAccessToken?: string | null + deletedCustomerAccessTokenId?: string | null + userErrors: Array<{ + __typename?: 'UserError' + field?: Array | null + message: string + }> + } | null } export type CustomerActivateByUrlMutationVariables = Exact<{ @@ -5133,24 +6914,23 @@ export type CustomerActivateByUrlMutationVariables = Exact<{ password: Scalars['String'] }> -export type CustomerActivateByUrlMutation = { __typename?: 'Mutation' } & { - customerActivateByUrl?: Maybe< - { __typename?: 'CustomerActivateByUrlPayload' } & { - customer?: Maybe<{ __typename?: 'Customer' } & Pick> - customerAccessToken?: Maybe< - { __typename?: 'CustomerAccessToken' } & Pick< - CustomerAccessToken, - 'accessToken' | 'expiresAt' - > - > - customerUserErrors: Array< - { __typename?: 'CustomerUserError' } & Pick< - CustomerUserError, - 'code' | 'field' | 'message' - > - > - } - > +export type CustomerActivateByUrlMutation = { + __typename?: 'Mutation' + customerActivateByUrl?: { + __typename?: 'CustomerActivateByUrlPayload' + customer?: { __typename?: 'Customer'; id: string } | null + customerAccessToken?: { + __typename?: 'CustomerAccessToken' + accessToken: string + expiresAt: any + } | null + customerUserErrors: Array<{ + __typename?: 'CustomerUserError' + code?: CustomerErrorCode | null + field?: Array | null + message: string + }> + } | null } export type CustomerActivateMutationVariables = Exact<{ @@ -5158,236 +6938,383 @@ export type CustomerActivateMutationVariables = Exact<{ input: CustomerActivateInput }> -export type CustomerActivateMutation = { __typename?: 'Mutation' } & { - customerActivate?: Maybe< - { __typename?: 'CustomerActivatePayload' } & { - customer?: Maybe<{ __typename?: 'Customer' } & Pick> - customerAccessToken?: Maybe< - { __typename?: 'CustomerAccessToken' } & Pick< - CustomerAccessToken, - 'accessToken' | 'expiresAt' - > - > - customerUserErrors: Array< - { __typename?: 'CustomerUserError' } & Pick< - CustomerUserError, - 'code' | 'field' | 'message' - > - > - } - > +export type CustomerActivateMutation = { + __typename?: 'Mutation' + customerActivate?: { + __typename?: 'CustomerActivatePayload' + customer?: { __typename?: 'Customer'; id: string } | null + customerAccessToken?: { + __typename?: 'CustomerAccessToken' + accessToken: string + expiresAt: any + } | null + customerUserErrors: Array<{ + __typename?: 'CustomerUserError' + code?: CustomerErrorCode | null + field?: Array | null + message: string + }> + } | null } export type CustomerCreateMutationVariables = Exact<{ input: CustomerCreateInput }> -export type CustomerCreateMutation = { __typename?: 'Mutation' } & { - customerCreate?: Maybe< - { __typename?: 'CustomerCreatePayload' } & { - customerUserErrors: Array< - { __typename?: 'CustomerUserError' } & Pick< - CustomerUserError, - 'code' | 'field' | 'message' - > - > - customer?: Maybe<{ __typename?: 'Customer' } & Pick> - } - > +export type CustomerCreateMutation = { + __typename?: 'Mutation' + customerCreate?: { + __typename?: 'CustomerCreatePayload' + customerUserErrors: Array<{ + __typename?: 'CustomerUserError' + code?: CustomerErrorCode | null + field?: Array | null + message: string + }> + customer?: { __typename?: 'Customer'; id: string } | null + } | null } export type GetSiteCollectionsQueryVariables = Exact<{ first: Scalars['Int'] }> -export type GetSiteCollectionsQuery = { __typename?: 'QueryRoot' } & { - collections: { __typename?: 'CollectionConnection' } & { - edges: Array< - { __typename?: 'CollectionEdge' } & { - node: { __typename?: 'Collection' } & Pick< - Collection, - 'id' | 'title' | 'handle' - > +export type GetSiteCollectionsQuery = { + __typename?: 'QueryRoot' + collections: { + __typename?: 'CollectionConnection' + edges: Array<{ + __typename?: 'CollectionEdge' + node: { + __typename?: 'Collection' + id: string + title: string + handle: string } - > + }> } } export type GetAllPagesQueryVariables = Exact<{ - first?: Maybe + first?: InputMaybe }> -export type GetAllPagesQuery = { __typename?: 'QueryRoot' } & { - pages: { __typename?: 'PageConnection' } & { - edges: Array< - { __typename?: 'PageEdge' } & { - node: { __typename?: 'Page' } & Pick - } - > +export type GetAllPagesQuery = { + __typename?: 'QueryRoot' + pages: { + __typename?: 'PageConnection' + edges: Array<{ + __typename?: 'PageEdge' + node: { __typename?: 'Page'; id: string; title: string; handle: string } + }> } } export type GetAllProductVendorsQueryVariables = Exact<{ - first?: Maybe - cursor?: Maybe + first?: InputMaybe + cursor?: InputMaybe }> -export type GetAllProductVendorsQuery = { __typename?: 'QueryRoot' } & { - products: { __typename?: 'ProductConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ProductEdge' } & Pick & { - node: { __typename?: 'Product' } & Pick - } - > +export type GetAllProductVendorsQuery = { + __typename?: 'QueryRoot' + products: { + __typename?: 'ProductConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductEdge' + cursor: string + node: { __typename?: 'Product'; vendor: string } + }> } } export type GetAllProductPathsQueryVariables = Exact<{ - first?: Maybe - cursor?: Maybe + first?: InputMaybe + cursor?: InputMaybe }> -export type GetAllProductPathsQuery = { __typename?: 'QueryRoot' } & { - products: { __typename?: 'ProductConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ProductEdge' } & Pick & { - node: { __typename?: 'Product' } & Pick - } - > +export type GetAllProductPathsQuery = { + __typename?: 'QueryRoot' + products: { + __typename?: 'ProductConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductEdge' + cursor: string + node: { __typename?: 'Product'; handle: string } + }> } } -export type ProductConnectionFragment = { __typename?: 'ProductConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ProductEdge' } & { - node: { __typename?: 'Product' } & Pick< - Product, - 'id' | 'title' | 'vendor' | 'handle' - > & { - priceRange: { __typename?: 'ProductPriceRange' } & { - minVariantPrice: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - } - images: { __typename?: 'ImageConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ImageEdge' } & { - node: { __typename?: 'Image' } & Pick< - Image, - 'originalSrc' | 'altText' | 'width' | 'height' - > - } - > - } +export type ProductConnectionFragment = { + __typename?: 'ProductConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductEdge' + node: { + __typename?: 'Product' + id: string + title: string + vendor: string + handle: string + priceRange: { + __typename?: 'ProductPriceRange' + minVariantPrice: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode } + } + images: { + __typename?: 'ImageConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ImageEdge' + node: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } + }> + } } - > + }> } export type GetAllProductsQueryVariables = Exact<{ - first?: Maybe - query?: Maybe - sortKey?: Maybe - reverse?: Maybe + first?: InputMaybe + query?: InputMaybe + sortKey?: InputMaybe + reverse?: InputMaybe }> -export type GetAllProductsQuery = { __typename?: 'QueryRoot' } & { - products: { __typename?: 'ProductConnection' } & ProductConnectionFragment +export type GetAllProductsQuery = { + __typename?: 'QueryRoot' + products: { + __typename?: 'ProductConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductEdge' + node: { + __typename?: 'Product' + id: string + title: string + vendor: string + handle: string + priceRange: { + __typename?: 'ProductPriceRange' + minVariantPrice: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + } + images: { + __typename?: 'ImageConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ImageEdge' + node: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } + }> + } + } + }> + } } -export type CheckoutDetailsFragment = { __typename?: 'Checkout' } & Pick< - Checkout, - 'id' | 'webUrl' | 'completedAt' | 'createdAt' | 'taxesIncluded' -> & { - subtotalPriceV2: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - totalTaxV2: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - totalPriceV2: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - lineItems: { __typename?: 'CheckoutLineItemConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'CheckoutLineItemEdge' } & { - node: { __typename?: 'CheckoutLineItem' } & Pick< - CheckoutLineItem, - 'id' | 'title' | 'quantity' - > & { - variant?: Maybe< - { __typename?: 'ProductVariant' } & Pick< - ProductVariant, - 'id' | 'sku' | 'title' - > & { - image?: Maybe< - { __typename?: 'Image' } & Pick< - Image, - 'originalSrc' | 'altText' | 'width' | 'height' - > - > - priceV2: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - compareAtPriceV2?: Maybe< - { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - > - product: { __typename?: 'Product' } & Pick< - Product, - 'handle' - > - } - > - } - } - > - } +export type CheckoutDetailsFragment = { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } +} export type GetCheckoutQueryVariables = Exact<{ checkoutId: Scalars['ID'] }> -export type GetCheckoutQuery = { __typename?: 'QueryRoot' } & { - node?: Maybe< +export type GetCheckoutQuery = { + __typename?: 'QueryRoot' + node?: | { __typename?: 'AppliedGiftCard' } | { __typename?: 'Article' } | { __typename?: 'Blog' } - | ({ __typename?: 'Checkout' } & CheckoutDetailsFragment) + | { __typename?: 'Cart' } + | { __typename?: 'CartLine' } + | { + __typename?: 'Checkout' + id: string + webUrl: any + completedAt?: any | null + createdAt: any + taxesIncluded: boolean + subtotalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalTaxV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + totalPriceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + lineItems: { + __typename?: 'CheckoutLineItemConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'CheckoutLineItemEdge' + node: { + __typename?: 'CheckoutLineItem' + id: string + title: string + quantity: number + variant?: { + __typename?: 'ProductVariant' + id: string + sku?: string | null + title: string + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + image?: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } | null + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + product: { __typename?: 'Product'; handle: string } + } | null + } + }> + } + } | { __typename?: 'CheckoutLineItem' } | { __typename?: 'Collection' } | { __typename?: 'Comment' } | { __typename?: 'ExternalVideo' } + | { __typename?: 'GenericFile' } + | { __typename?: 'Location' } | { __typename?: 'MailingAddress' } | { __typename?: 'MediaImage' } + | { __typename?: 'Menu' } + | { __typename?: 'MenuItem' } | { __typename?: 'Metafield' } | { __typename?: 'Model3d' } | { __typename?: 'Order' } @@ -5396,191 +7323,268 @@ export type GetCheckoutQuery = { __typename?: 'QueryRoot' } & { | { __typename?: 'Product' } | { __typename?: 'ProductOption' } | { __typename?: 'ProductVariant' } + | { __typename?: 'Shop' } | { __typename?: 'ShopPolicy' } + | { __typename?: 'UrlRedirect' } | { __typename?: 'Video' } - > + | null } export type GetProductsFromCollectionQueryVariables = Exact<{ categoryId: Scalars['ID'] - first?: Maybe - sortKey?: Maybe - reverse?: Maybe + first?: InputMaybe + sortKey?: InputMaybe + reverse?: InputMaybe }> -export type GetProductsFromCollectionQuery = { __typename?: 'QueryRoot' } & { - node?: Maybe< - | ({ __typename?: 'AppliedGiftCard' } & Pick) - | ({ __typename?: 'Article' } & Pick) - | ({ __typename?: 'Blog' } & Pick) - | ({ __typename?: 'Checkout' } & Pick) - | ({ __typename?: 'CheckoutLineItem' } & Pick) - | ({ __typename?: 'Collection' } & Pick & { - products: { - __typename?: 'ProductConnection' - } & ProductConnectionFragment - }) - | ({ __typename?: 'Comment' } & Pick) - | ({ __typename?: 'ExternalVideo' } & Pick) - | ({ __typename?: 'MailingAddress' } & Pick) - | ({ __typename?: 'MediaImage' } & Pick) - | ({ __typename?: 'Metafield' } & Pick) - | ({ __typename?: 'Model3d' } & Pick) - | ({ __typename?: 'Order' } & Pick) - | ({ __typename?: 'Page' } & Pick) - | ({ __typename?: 'Payment' } & Pick) - | ({ __typename?: 'Product' } & Pick) - | ({ __typename?: 'ProductOption' } & Pick) - | ({ __typename?: 'ProductVariant' } & Pick) - | ({ __typename?: 'ShopPolicy' } & Pick) - | ({ __typename?: 'Video' } & Pick) - > +export type GetProductsFromCollectionQuery = { + __typename?: 'QueryRoot' + node?: + | { __typename?: 'AppliedGiftCard'; id: string } + | { __typename?: 'Article'; id: string } + | { __typename?: 'Blog'; id: string } + | { __typename?: 'Cart'; id: string } + | { __typename?: 'CartLine'; id: string } + | { __typename?: 'Checkout'; id: string } + | { __typename?: 'CheckoutLineItem'; id: string } + | { + __typename?: 'Collection' + id: string + products: { + __typename?: 'ProductConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductEdge' + node: { + __typename?: 'Product' + id: string + title: string + vendor: string + handle: string + priceRange: { + __typename?: 'ProductPriceRange' + minVariantPrice: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + } + images: { + __typename?: 'ImageConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ImageEdge' + node: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } + }> + } + } + }> + } + } + | { __typename?: 'Comment'; id: string } + | { __typename?: 'ExternalVideo'; id: string } + | { __typename?: 'GenericFile'; id: string } + | { __typename?: 'Location'; id: string } + | { __typename?: 'MailingAddress'; id: string } + | { __typename?: 'MediaImage'; id: string } + | { __typename?: 'Menu'; id: string } + | { __typename?: 'MenuItem'; id: string } + | { __typename?: 'Metafield'; id: string } + | { __typename?: 'Model3d'; id: string } + | { __typename?: 'Order'; id: string } + | { __typename?: 'Page'; id: string } + | { __typename?: 'Payment'; id: string } + | { __typename?: 'Product'; id: string } + | { __typename?: 'ProductOption'; id: string } + | { __typename?: 'ProductVariant'; id: string } + | { __typename?: 'Shop'; id: string } + | { __typename?: 'ShopPolicy'; id: string } + | { __typename?: 'UrlRedirect'; id: string } + | { __typename?: 'Video'; id: string } + | null } export type GetCustomerIdQueryVariables = Exact<{ customerAccessToken: Scalars['String'] }> -export type GetCustomerIdQuery = { __typename?: 'QueryRoot' } & { - customer?: Maybe<{ __typename?: 'Customer' } & Pick> +export type GetCustomerIdQuery = { + __typename?: 'QueryRoot' + customer?: { __typename?: 'Customer'; id: string } | null } export type GetCustomerQueryVariables = Exact<{ customerAccessToken: Scalars['String'] }> -export type GetCustomerQuery = { __typename?: 'QueryRoot' } & { - customer?: Maybe< - { __typename?: 'Customer' } & Pick< - Customer, - | 'id' - | 'firstName' - | 'lastName' - | 'displayName' - | 'email' - | 'phone' - | 'tags' - | 'acceptsMarketing' - | 'createdAt' - > - > +export type GetCustomerQuery = { + __typename?: 'QueryRoot' + customer?: { + __typename?: 'Customer' + id: string + firstName?: string | null + lastName?: string | null + displayName: string + email?: string | null + phone?: string | null + tags: Array + acceptsMarketing: boolean + createdAt: any + } | null } export type GetPageQueryVariables = Exact<{ id: Scalars['ID'] }> -export type GetPageQuery = { __typename?: 'QueryRoot' } & { - node?: Maybe< - | ({ __typename?: 'AppliedGiftCard' } & Pick) - | ({ __typename?: 'Article' } & Pick) - | ({ __typename?: 'Blog' } & Pick) - | ({ __typename?: 'Checkout' } & Pick) - | ({ __typename?: 'CheckoutLineItem' } & Pick) - | ({ __typename?: 'Collection' } & Pick) - | ({ __typename?: 'Comment' } & Pick) - | ({ __typename?: 'ExternalVideo' } & Pick) - | ({ __typename?: 'MailingAddress' } & Pick) - | ({ __typename?: 'MediaImage' } & Pick) - | ({ __typename?: 'Metafield' } & Pick) - | ({ __typename?: 'Model3d' } & Pick) - | ({ __typename?: 'Order' } & Pick) - | ({ __typename?: 'Page' } & Pick< - Page, - 'title' | 'handle' | 'body' | 'bodySummary' | 'id' - >) - | ({ __typename?: 'Payment' } & Pick) - | ({ __typename?: 'Product' } & Pick) - | ({ __typename?: 'ProductOption' } & Pick) - | ({ __typename?: 'ProductVariant' } & Pick) - | ({ __typename?: 'ShopPolicy' } & Pick) - | ({ __typename?: 'Video' } & Pick) - > +export type GetPageQuery = { + __typename?: 'QueryRoot' + node?: + | { __typename?: 'AppliedGiftCard'; id: string } + | { __typename?: 'Article'; id: string } + | { __typename?: 'Blog'; id: string } + | { __typename?: 'Cart'; id: string } + | { __typename?: 'CartLine'; id: string } + | { __typename?: 'Checkout'; id: string } + | { __typename?: 'CheckoutLineItem'; id: string } + | { __typename?: 'Collection'; id: string } + | { __typename?: 'Comment'; id: string } + | { __typename?: 'ExternalVideo'; id: string } + | { __typename?: 'GenericFile'; id: string } + | { __typename?: 'Location'; id: string } + | { __typename?: 'MailingAddress'; id: string } + | { __typename?: 'MediaImage'; id: string } + | { __typename?: 'Menu'; id: string } + | { __typename?: 'MenuItem'; id: string } + | { __typename?: 'Metafield'; id: string } + | { __typename?: 'Model3d'; id: string } + | { __typename?: 'Order'; id: string } + | { + __typename?: 'Page' + title: string + handle: string + body: any + bodySummary: string + id: string + } + | { __typename?: 'Payment'; id: string } + | { __typename?: 'Product'; id: string } + | { __typename?: 'ProductOption'; id: string } + | { __typename?: 'ProductVariant'; id: string } + | { __typename?: 'Shop'; id: string } + | { __typename?: 'ShopPolicy'; id: string } + | { __typename?: 'UrlRedirect'; id: string } + | { __typename?: 'Video'; id: string } + | null } export type GetProductBySlugQueryVariables = Exact<{ slug: Scalars['String'] }> -export type GetProductBySlugQuery = { __typename?: 'QueryRoot' } & { - productByHandle?: Maybe< - { __typename?: 'Product' } & Pick< - Product, - | 'id' - | 'handle' - | 'title' - | 'productType' - | 'vendor' - | 'description' - | 'descriptionHtml' - > & { - options: Array< - { __typename?: 'ProductOption' } & Pick< - ProductOption, - 'id' | 'name' | 'values' - > - > - priceRange: { __typename?: 'ProductPriceRange' } & { - maxVariantPrice: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - minVariantPrice: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - } - variants: { __typename?: 'ProductVariantConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ProductVariantEdge' } & { - node: { __typename?: 'ProductVariant' } & Pick< - ProductVariant, - 'id' | 'title' | 'sku' - > & { - selectedOptions: Array< - { __typename?: 'SelectedOption' } & Pick< - SelectedOption, - 'name' | 'value' - > - > - priceV2: { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - compareAtPriceV2?: Maybe< - { __typename?: 'MoneyV2' } & Pick< - MoneyV2, - 'amount' | 'currencyCode' - > - > - } - } - > - } - images: { __typename?: 'ImageConnection' } & { - pageInfo: { __typename?: 'PageInfo' } & Pick< - PageInfo, - 'hasNextPage' | 'hasPreviousPage' - > - edges: Array< - { __typename?: 'ImageEdge' } & { - node: { __typename?: 'Image' } & Pick< - Image, - 'originalSrc' | 'altText' | 'width' | 'height' - > - } - > - } +export type GetProductBySlugQuery = { + __typename?: 'QueryRoot' + productByHandle?: { + __typename?: 'Product' + id: string + handle: string + availableForSale: boolean + title: string + productType: string + vendor: string + description: string + descriptionHtml: any + options: Array<{ + __typename?: 'ProductOption' + id: string + name: string + values: Array + }> + priceRange: { + __typename?: 'ProductPriceRange' + maxVariantPrice: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode } - > + minVariantPrice: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + } + variants: { + __typename?: 'ProductVariantConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ProductVariantEdge' + node: { + __typename?: 'ProductVariant' + id: string + title: string + sku?: string | null + availableForSale: boolean + requiresShipping: boolean + selectedOptions: Array<{ + __typename?: 'SelectedOption' + name: string + value: string + }> + priceV2: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } + compareAtPriceV2?: { + __typename?: 'MoneyV2' + amount: any + currencyCode: CurrencyCode + } | null + } + }> + } + images: { + __typename?: 'ImageConnection' + pageInfo: { + __typename?: 'PageInfo' + hasNextPage: boolean + hasPreviousPage: boolean + } + edges: Array<{ + __typename?: 'ImageEdge' + node: { + __typename?: 'Image' + originalSrc: any + altText?: string | null + width?: number | null + height?: number | null + } + }> + } + } | null } export type GetSiteInfoQueryVariables = Exact<{ [key: string]: never }> -export type GetSiteInfoQuery = { __typename?: 'QueryRoot' } & { - shop: { __typename?: 'Shop' } & Pick +export type GetSiteInfoQuery = { + __typename?: 'QueryRoot' + shop: { __typename?: 'Shop'; name: string } } diff --git a/packages/shopify/schema.graphql b/packages/shopify/schema.graphql index 9c657fe43..d2e600fb9 100644 --- a/packages/shopify/schema.graphql +++ b/packages/shopify/schema.graphql @@ -14,18 +14,26 @@ directive @accessRestricted( ) on FIELD_DEFINITION | OBJECT """ -Contextualize data. +Contextualizes data based on the additional information provided by the directive. For example, you can use the `@inContext(country: CA)` directive to [query a product's price](https://shopify.dev/api/examples/international-pricing#query-product-prices) in a storefront within the context of Canada. """ directive @inContext( """ - The country code for context. + The country code for context. For example, `CA`. """ - country: CountryCode! -) on QUERY | MUTATION + country: CountryCode -""" -A version of the API. -""" + """ + The language code for context. For example, `EN`. + """ + language: LanguageCode + + """ + The identifier of the customer's preferred location. + """ + preferredLocationId: ID +) on MUTATION | QUERY + +"A version of the API, as defined by [Shopify API versioning](https://shopify.dev/api/usage/versioning).\nVersions are commonly referred to by their handle (for example, `2021-10`).\n" type ApiVersion { """ The human-readable name of the version. @@ -38,7 +46,7 @@ type ApiVersion { handle: String! """ - Whether the version is actively supported by Shopify. Supported API versions are guaranteed to be stable. Unsupported API versions include unstable, release candidate, and end-of-life versions that are marked as unsupported. For more information, refer to [Versioning](https://shopify.dev/concepts/about-apis/versioning). + Whether the version is actively supported by Shopify. Supported API versions are guaranteed to be stable. Unsupported API versions include unstable, release candidate, and end-of-life versions that are marked as unsupported. For more information, refer to [Versioning](https://shopify.dev/api/usage/versioning). """ supported: Boolean! } @@ -50,7 +58,7 @@ type AppliedGiftCard implements Node { """ The amount that was taken from the gift card by applying it. """ - amountUsed: Money! @deprecated(reason: "Use `amountUsedV2` instead") + amountUsed: Money! @deprecated(reason: "Use `amountUsedV2` instead.") """ The amount that was taken from the gift card by applying it. @@ -60,7 +68,7 @@ type AppliedGiftCard implements Node { """ The amount left on the gift card. """ - balance: Money! @deprecated(reason: "Use `balanceV2` instead") + balance: Money! @deprecated(reason: "Use `balanceV2` instead.") """ The amount left on the gift card. @@ -68,7 +76,7 @@ type AppliedGiftCard implements Node { balanceV2: MoneyV2! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -86,11 +94,11 @@ type AppliedGiftCard implements Node { """ An article in an online store blog. """ -type Article implements Node { +type Article implements HasMetafields & Node & OnlineStorePublishable { """ The article's author. """ - author: ArticleAuthor! @deprecated(reason: "Use `authorV2` instead") + author: ArticleAuthor! @deprecated(reason: "Use `authorV2` instead.") """ The article's author. @@ -106,26 +114,26 @@ type Article implements Node { List of comments posted on the article. """ comments( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -162,40 +170,46 @@ type Article implements Node { """ excerptHtml: HTML - """ - A human-friendly unique string for the Article automatically generated from its title. - """ + "A human-friendly unique string for the Article automatically generated from its title.\n" handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! """ The image associated with the article. """ - image( + image: Image + + """ + Returns a metafield found by namespace and key. + """ + metafield( """ - Image width in pixels between 1 and 2048. This argument is deprecated: Use `maxWidth` on `Image.transformedSrc` instead. + The identifier for the metafield. """ - maxWidth: Int + key: String! """ - Image height in pixels between 1 and 2048. This argument is deprecated: Use `maxHeight` on `Image.transformedSrc` instead. + A container for a set of metafields. """ - maxHeight: Int + namespace: String! + ): Metafield + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( """ - Crops the image according to the specified region. This argument is deprecated: Use `crop` on `Image.transformedSrc` instead. + The list of metafields to retrieve by namespace and key. """ - crop: CropRegion + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! - """ - Image size multiplier for high-resolution retina displays. Must be between 1 and 3. This argument is deprecated: Use `scale` on `Image.transformedSrc` instead. - """ - scale: Int = 1 - ): Image + """ + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. + """ + onlineStoreUrl: URL """ The date and time when the article was published. @@ -216,11 +230,6 @@ type Article implements Node { The article’s name. """ title: String! - - """ - The url pointing to the article accessible from the web. - """ - url: URL! } """ @@ -253,24 +262,25 @@ type ArticleAuthor { name: String! } -""" -An auto-generated type for paginating through multiple Articles. -""" +"An auto-generated type for paginating through multiple Articles.\n" type ArticleConnection { """ A list of edges. """ edges: [ArticleEdge!]! + """ + A list of the nodes contained in ArticleEdge. + """ + nodes: [Article!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Article and a cursor during pagination. -""" +"An auto-generated type which holds one Article and a cursor during pagination.\n" type ArticleEdge { """ A cursor for use in pagination. @@ -288,9 +298,9 @@ The set of valid sort keys for the Article query. """ enum ArticleSortKeys { """ - Sort by the `title` value. + Sort by the `author` value. """ - TITLE + AUTHOR """ Sort by the `blog_title` value. @@ -298,31 +308,27 @@ enum ArticleSortKeys { BLOG_TITLE """ - Sort by the `author` value. + Sort by the `id` value. """ - AUTHOR - - """ - Sort by the `updated_at` value. - """ - UPDATED_AT + ID """ Sort by the `published_at` value. """ PUBLISHED_AT - """ - Sort by the `id` value. - """ - ID + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `title` value. """ - RELEVANCE + TITLE + + """ + Sort by the `updated_at` value. + """ + UPDATED_AT } """ @@ -355,9 +361,7 @@ input AttributeInput { value: String! } -""" -Automatic discount applications capture the intentions of a discount that was automatically applied. -""" +"Automatic discount applications capture the intentions of a discount that was automatically applied.\n" type AutomaticDiscountApplication implements DiscountApplication { """ The method by which the discount's value is allocated to its entitled items. @@ -389,11 +393,7 @@ type AutomaticDiscountApplication implements DiscountApplication { A collection of available shipping rates for a checkout. """ type AvailableShippingRates { - """ - Whether or not the shipping rates are ready. - The `shippingRates` field is `null` when this value is `false`. - This field should be polled until its value becomes `true`. - """ + "Whether or not the shipping rates are ready.\nThe `shippingRates` field is `null` when this value is `false`.\nThis field should be polled until its value becomes `true`.\n" ready: Boolean! """ @@ -405,7 +405,7 @@ type AvailableShippingRates { """ An online store blog. """ -type Blog implements Node { +type Blog implements HasMetafields & Node & OnlineStorePublishable { """ Find an article by its handle. """ @@ -420,25 +420,28 @@ type Blog implements Node { List of the blog's articles. """ articles( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `author`\n - `blog_title`\n - `created_at`\n - `tag`\n - `tag_not`\n - `updated_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -449,19 +452,6 @@ type Blog implements Node { Sort the underlying list by the given key. """ sortKey: ArticleSortKeys = ID - - """ - Supported filter parameters: - - `author` - - `blog_title` - - `created_at` - - `tag` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): ArticleConnection! """ @@ -469,16 +459,42 @@ type Blog implements Node { """ authors: [ArticleAuthor!]! - """ - A human-friendly unique string for the Blog automatically generated from its title. - """ + "A human-friendly unique string for the Blog automatically generated from its title.\n" handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! + """ + Returns a metafield found by namespace and key. + """ + metafield( + """ + The identifier for the metafield. + """ + key: String! + + """ + A container for a set of metafields. + """ + namespace: String! + ): Metafield + + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( + """ + The list of metafields to retrieve by namespace and key. + """ + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! + + """ + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. + """ + onlineStoreUrl: URL + """ The blog's SEO information. """ @@ -488,31 +504,27 @@ type Blog implements Node { The blogs’s title. """ title: String! - - """ - The url pointing to the blog accessible from the web. - """ - url: URL! } -""" -An auto-generated type for paginating through multiple Blogs. -""" +"An auto-generated type for paginating through multiple Blogs.\n" type BlogConnection { """ A list of edges. """ edges: [BlogEdge!]! + """ + A list of the nodes contained in BlogEdge. + """ + nodes: [Blog!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Blog and a cursor during pagination. -""" +"An auto-generated type which holds one Blog and a cursor during pagination.\n" type BlogEdge { """ A cursor for use in pagination. @@ -534,43 +546,24 @@ enum BlogSortKeys { """ HANDLE - """ - Sort by the `title` value. - """ - TITLE - """ Sort by the `id` value. """ ID - """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. - """ + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" RELEVANCE + + """ + Sort by the `title` value. + """ + TITLE } """ Card brand, such as Visa or Mastercard, which can be used for payments. """ enum CardBrand { - """ - Visa. - """ - VISA - - """ - Mastercard. - """ - MASTERCARD - - """ - Discover. - """ - DISCOVER - """ American Express. """ @@ -581,10 +574,853 @@ enum CardBrand { """ DINERS_CLUB + """ + Discover. + """ + DISCOVER + """ JCB. """ JCB + + """ + Mastercard. + """ + MASTERCARD + + """ + Visa. + """ + VISA +} + +""" +A cart represents the merchandise that a buyer intends to purchase, and the estimated cost associated with the cart. To learn how to interact with a cart during a customer's session, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). +""" +type Cart implements Node { + """ + An attribute associated with the cart. + """ + attribute( + """ + The key of the attribute. + """ + key: String! + ): Attribute + + """ + The attributes associated with the cart. Attributes are represented as key-value pairs. + """ + attributes: [Attribute!]! + + """ + Information about the buyer that is interacting with the cart. + """ + buyerIdentity: CartBuyerIdentity! + + """ + The URL of the checkout for the cart. + """ + checkoutUrl: URL! + + """ + The estimated costs that the buyer will pay at checkout. The costs are subject to change and changes will be reflected at checkout. The `cost` field uses the `buyerIdentity` field to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). + """ + cost: CartCost! + + """ + The date and time when the cart was created. + """ + createdAt: DateTime! + + """ + The delivery groups available for the cart, based on the default address of the logged-in customer. + """ + deliveryGroups( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CartDeliveryGroupConnection! + + """ + The discounts that have been applied to the entire cart. + """ + discountAllocations: [CartDiscountAllocation!]! + + "The case-insensitive discount codes that the customer added at checkout.\n" + discountCodes: [CartDiscountCode!]! + + """ + The estimated costs that the buyer will pay at checkout. The estimated costs are subject to change and changes will be reflected at checkout. The `estimatedCost` field uses the `buyerIdentity` field to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart). + """ + estimatedCost: CartEstimatedCost! @deprecated(reason: "Use `cost` instead.") + + """ + A globally-unique identifier. + """ + id: ID! + + """ + A list of lines containing information about the items the customer intends to purchase. + """ + lines( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CartLineConnection! + + """ + A note that is associated with the cart. For example, the note can be a personalized message to the buyer. + """ + note: String + + """ + The total number of items in the cart. + """ + totalQuantity: Int! + + """ + The date and time when the cart was updated. + """ + updatedAt: DateTime! +} + +""" +Return type for `cartAttributesUpdate` mutation. +""" +type CartAttributesUpdatePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +The discounts automatically applied to the cart line based on prerequisites that have been met. +""" +type CartAutomaticDiscountAllocation implements CartDiscountAllocation { + """ + The discounted amount that has been applied to the cart line. + """ + discountedAmount: MoneyV2! + + """ + The title of the allocated discount. + """ + title: String! +} + +""" +Represents information about the buyer that is interacting with the cart. +""" +type CartBuyerIdentity { + """ + The country where the buyer is located. + """ + countryCode: CountryCode + + """ + The customer account associated with the cart. + """ + customer: Customer + + """ + The email address of the buyer that is interacting with the cart. + """ + email: String + + """ + The phone number of the buyer that is interacting with the cart. + """ + phone: String +} + +"Specifies the input fields to update the buyer information associated with a cart.\nBuyer identity is used to determine\n[international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout)\nand should match the customer's shipping address.\n" +input CartBuyerIdentityInput { + """ + The country where the buyer is located. + """ + countryCode: CountryCode + + """ + The access token used to identify the customer associated with the cart. + """ + customerAccessToken: String + + """ + The email address of the buyer that is interacting with the cart. + """ + email: String + + """ + The phone number of the buyer that is interacting with the cart. + """ + phone: String +} + +""" +Return type for `cartBuyerIdentityUpdate` mutation. +""" +type CartBuyerIdentityUpdatePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +The discount that has been applied to the cart line using a discount code. +""" +type CartCodeDiscountAllocation implements CartDiscountAllocation { + """ + The code used to apply the discount. + """ + code: String! + + """ + The discounted amount that has been applied to the cart line. + """ + discountedAmount: MoneyV2! +} + +"The costs that the buyer will pay at checkout.\nIt uses [`CartBuyerIdentity`](https://shopify.dev/api/storefront/reference/cart/cartbuyeridentity) to determine\n[international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart).\n" +type CartCost { + """ + The estimated amount, before taxes and discounts, for the customer to pay at checkout. The checkout charge amount doesn't include any deferred payments that'll be paid at a later date. If the cart has no deferred payments, then the checkout charge amount is equivalent to `subtotalAmount`. + """ + checkoutChargeAmount: MoneyV2! + + """ + The amount, before taxes and cart-level discounts, for the customer to pay. + """ + subtotalAmount: MoneyV2! + + """ + Whether the subtotal amount is estimated. + """ + subtotalAmountEstimated: Boolean! + + """ + The total amount for the customer to pay. + """ + totalAmount: MoneyV2! + + """ + Whether the total amount is estimated. + """ + totalAmountEstimated: Boolean! + + """ + The duty amount for the customer to pay at checkout. + """ + totalDutyAmount: MoneyV2 + + """ + Whether the total duty amount is estimated. + """ + totalDutyAmountEstimated: Boolean! + + """ + The tax amount for the customer to pay at checkout. + """ + totalTaxAmount: MoneyV2 + + """ + Whether the total tax amount is estimated. + """ + totalTaxAmountEstimated: Boolean! +} + +""" +Return type for `cartCreate` mutation. +""" +type CartCreatePayload { + """ + The new cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +The discounts automatically applied to the cart line based on prerequisites that have been met. +""" +type CartCustomDiscountAllocation implements CartDiscountAllocation { + """ + The discounted amount that has been applied to the cart line. + """ + discountedAmount: MoneyV2! + + """ + The title of the allocated discount. + """ + title: String! +} + +""" +Information about the options available for one or more line items to be delivered to a specific address. +""" +type CartDeliveryGroup { + """ + A list of cart lines for the delivery group. + """ + cartLines( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): CartLineConnection! + + """ + The destination address for the delivery group. + """ + deliveryAddress: MailingAddress! + + """ + The delivery options available for the delivery group. + """ + deliveryOptions: [CartDeliveryOption!]! + + """ + The ID for the delivery group. + """ + id: ID! +} + +"An auto-generated type for paginating through multiple CartDeliveryGroups.\n" +type CartDeliveryGroupConnection { + """ + A list of edges. + """ + edges: [CartDeliveryGroupEdge!]! + + """ + A list of the nodes contained in CartDeliveryGroupEdge. + """ + nodes: [CartDeliveryGroup!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one CartDeliveryGroup and a cursor during pagination.\n" +type CartDeliveryGroupEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of CartDeliveryGroupEdge. + """ + node: CartDeliveryGroup! +} + +""" +Information about a delivery option. +""" +type CartDeliveryOption { + """ + The code of the delivery option. + """ + code: String + + """ + The method for the delivery option. + """ + deliveryMethodType: DeliveryMethodType! + + """ + The description of the delivery option. + """ + description: String + + """ + The estimated cost for the delivery option. + """ + estimatedCost: MoneyV2! + + """ + The title of the delivery option. + """ + title: String +} + +""" +The discounts that have been applied to the cart line. +""" +interface CartDiscountAllocation { + """ + The discounted amount that has been applied to the cart line. + """ + discountedAmount: MoneyV2! +} + +""" +The discount codes applied to the cart. +""" +type CartDiscountCode { + """ + Whether the discount code is applicable to the cart's current contents. + """ + applicable: Boolean! + + """ + The code for the discount. + """ + code: String! +} + +""" +Return type for `cartDiscountCodesUpdate` mutation. +""" +type CartDiscountCodesUpdatePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +Possible error codes that can be returned by `CartUserError`. +""" +enum CartErrorCode { + """ + The input value is invalid. + """ + INVALID + + """ + Merchandise line was not found in cart. + """ + INVALID_MERCHANDISE_LINE + + """ + The input value should be less than the maximum value allowed. + """ + LESS_THAN + + """ + Missing discount code. + """ + MISSING_DISCOUNT_CODE + + """ + Missing note. + """ + MISSING_NOTE +} + +"The estimated costs that the buyer will pay at checkout.\nIt uses [`CartBuyerIdentity`](https://shopify.dev/api/storefront/reference/cart/cartbuyeridentity) to determine\n[international pricing](https://shopify.dev/api/examples/international-pricing#create-a-cart).\n" +type CartEstimatedCost { + """ + The estimated amount, before taxes and discounts, for the customer to pay at checkout. The checkout charge amount doesn't include any deferred payments that'll be paid at a later date. If the cart has no deferred payments, then the checkout charge amount is equivalent to`subtotal_amount`. + """ + checkoutChargeAmount: MoneyV2! + + """ + The estimated amount, before taxes and discounts, for the customer to pay. + """ + subtotalAmount: MoneyV2! + + """ + The estimated total amount for the customer to pay. + """ + totalAmount: MoneyV2! + + """ + The estimated duty amount for the customer to pay at checkout. + """ + totalDutyAmount: MoneyV2 + + """ + The estimated tax amount for the customer to pay at checkout. + """ + totalTaxAmount: MoneyV2 +} + +""" +Specifies the input fields to create a cart. +""" +input CartInput { + """ + An array of key-value pairs that contains additional information about the cart. + """ + attributes: [AttributeInput!] + + """ + The customer associated with the cart. Used to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout). Buyer identity should match the customer's shipping address. + """ + buyerIdentity: CartBuyerIdentityInput + + "The case-insensitive discount codes that the customer added at checkout.\n" + discountCodes: [String!] + + """ + A list of merchandise lines to add to the cart. + """ + lines: [CartLineInput!] + + """ + A note that is associated with the cart. For example, the note can be a personalized message to the buyer. + """ + note: String +} + +""" +Represents information about the merchandise in the cart. +""" +type CartLine implements Node { + """ + An attribute associated with the cart line. + """ + attribute( + """ + The key of the attribute. + """ + key: String! + ): Attribute + + """ + The attributes associated with the cart line. Attributes are represented as key-value pairs. + """ + attributes: [Attribute!]! + + """ + The cost of the merchandise that the buyer will pay for at checkout. The costs are subject to change and changes will be reflected at checkout. + """ + cost: CartLineCost! + + """ + The discounts that have been applied to the cart line. + """ + discountAllocations: [CartDiscountAllocation!]! + + """ + The estimated cost of the merchandise that the buyer will pay for at checkout. The estimated costs are subject to change and changes will be reflected at checkout. + """ + estimatedCost: CartLineEstimatedCost! + @deprecated(reason: "Use `cost` instead.") + + """ + A globally-unique identifier. + """ + id: ID! + + """ + The merchandise that the buyer intends to purchase. + """ + merchandise: Merchandise! + + """ + The quantity of the merchandise that the customer intends to purchase. + """ + quantity: Int! + + """ + The selling plan associated with the cart line and the effect that each selling plan has on variants when they're purchased. + """ + sellingPlanAllocation: SellingPlanAllocation +} + +"An auto-generated type for paginating through multiple CartLines.\n" +type CartLineConnection { + """ + A list of edges. + """ + edges: [CartLineEdge!]! + + """ + A list of the nodes contained in CartLineEdge. + """ + nodes: [CartLine!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +The cost of the merchandise line that the buyer will pay at checkout. +""" +type CartLineCost { + """ + The amount of the merchandise line. + """ + amountPerQuantity: MoneyV2! + + """ + The compare at amount of the merchandise line. + """ + compareAtAmountPerQuantity: MoneyV2 + + """ + The cost of the merchandise line before line-level discounts. + """ + subtotalAmount: MoneyV2! + + """ + The total cost of the merchandise line. + """ + totalAmount: MoneyV2! +} + +"An auto-generated type which holds one CartLine and a cursor during pagination.\n" +type CartLineEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of CartLineEdge. + """ + node: CartLine! +} + +""" +The estimated cost of the merchandise line that the buyer will pay at checkout. +""" +type CartLineEstimatedCost { + """ + The amount of the merchandise line. + """ + amount: MoneyV2! + + """ + The compare at amount of the merchandise line. + """ + compareAtAmount: MoneyV2 + + """ + The estimated cost of the merchandise line before discounts. + """ + subtotalAmount: MoneyV2! + + """ + The estimated total cost of the merchandise line. + """ + totalAmount: MoneyV2! +} + +""" +Specifies the input fields to create a merchandise line on a cart. +""" +input CartLineInput { + """ + An array of key-value pairs that contains additional information about the merchandise line. + """ + attributes: [AttributeInput!] + + """ + The identifier of the merchandise that the buyer intends to purchase. + """ + merchandiseId: ID! + + """ + The quantity of the merchandise. + """ + quantity: Int = 1 + + """ + The identifier of the selling plan that the merchandise is being purchased with. + """ + sellingPlanId: ID +} + +""" +Specifies the input fields to update a line item on a cart. +""" +input CartLineUpdateInput { + """ + An array of key-value pairs that contains additional information about the merchandise line. + """ + attributes: [AttributeInput!] + + """ + The identifier of the merchandise line. + """ + id: ID! + + """ + The identifier of the merchandise for the line item. + """ + merchandiseId: ID + + """ + The quantity of the line item. + """ + quantity: Int + + """ + The identifier of the selling plan that the merchandise is being purchased with. + """ + sellingPlanId: ID +} + +""" +Return type for `cartLinesAdd` mutation. +""" +type CartLinesAddPayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +Return type for `cartLinesRemove` mutation. +""" +type CartLinesRemovePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +Return type for `cartLinesUpdate` mutation. +""" +type CartLinesUpdatePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +Return type for `cartNoteUpdate` mutation. +""" +type CartNoteUpdatePayload { + """ + The updated cart. + """ + cart: Cart + + """ + The list of errors that occurred from executing the mutation. + """ + userErrors: [CartUserError!]! +} + +""" +Represents an error that happens during execution of a cart mutation. +""" +type CartUserError implements DisplayableError { + """ + The error code. + """ + code: CartErrorCode + + """ + The path to the input field that caused the error. + """ + field: [String!] + + """ + The error message. + """ + message: String! } """ @@ -596,13 +1432,14 @@ type Checkout implements Node { """ appliedGiftCards: [AppliedGiftCard!]! - """ - The available shipping rates for this Checkout. - Should only be used when checkout `requiresShipping` is `true` and - the shipping address is valid. - """ + "The available shipping rates for this Checkout.\nShould only be used when checkout `requiresShipping` is `true` and\nthe shipping address is valid.\n" availableShippingRates: AvailableShippingRates + """ + The identity of the customer associated with the checkout. + """ + buyerIdentity: CheckoutBuyerIdentity! + """ The date and time when the checkout was completed. """ @@ -614,7 +1451,7 @@ type Checkout implements Node { createdAt: DateTime! """ - The currency code for the Checkout. + The currency code for the checkout. """ currencyCode: CurrencyCode! @@ -623,38 +1460,30 @@ type Checkout implements Node { """ customAttributes: [Attribute!]! - """ - The customer associated with the checkout. - """ - customer: Customer - @deprecated( - reason: "This field will always return null. If you have an authentication token for the customer, you can use the `customer` field on the query root to retrieve it." - ) - """ Discounts that have been applied on the checkout. """ discountApplications( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -667,7 +1496,7 @@ type Checkout implements Node { email: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -675,26 +1504,26 @@ type Checkout implements Node { A list of line item objects, each one containing information about an item in the checkout. """ lineItems( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -724,19 +1553,14 @@ type Checkout implements Node { """ The amount left to be paid. This is equal to the cost of the line items, taxes and shipping minus discounts and gift cards. """ - paymentDue: Money! @deprecated(reason: "Use `paymentDueV2` instead") + paymentDue: Money! @deprecated(reason: "Use `paymentDueV2` instead.") """ - The amount left to be paid. This is equal to the cost of the line items, duties, taxes and shipping minus discounts and gift cards. + The amount left to be paid. This is equal to the cost of the line items, duties, taxes, and shipping, minus discounts and gift cards. """ paymentDueV2: MoneyV2! - """ - Whether or not the Checkout is ready and can be completed. Checkouts may - have asynchronous operations that can take time to finish. If you want - to complete a checkout or ensure all the fields are populated and up to - date, polling is required until the value is true. - """ + "Whether or not the Checkout is ready and can be completed. Checkouts may\nhave asynchronous operations that can take time to finish. If you want\nto complete a checkout or ensure all the fields are populated and up to\ndate, polling is required until the value is true.\n" ready: Boolean! """ @@ -749,9 +1573,7 @@ type Checkout implements Node { """ shippingAddress: MailingAddress - """ - The discounts that have been allocated onto the shipping line by discount applications. - """ + "The discounts that have been allocated onto the shipping line by discount applications.\n" shippingDiscountAllocations: [DiscountAllocation!]! """ @@ -762,37 +1584,42 @@ type Checkout implements Node { """ Price of the checkout before shipping and taxes. """ - subtotalPrice: Money! @deprecated(reason: "Use `subtotalPriceV2` instead") + subtotalPrice: Money! @deprecated(reason: "Use `subtotalPriceV2` instead.") """ - Price of the checkout before duties, shipping and taxes. + The price at checkout before duties, shipping, and taxes. """ subtotalPriceV2: MoneyV2! """ - Specifies if the Checkout is tax exempt. + Whether the checkout is tax exempt. """ taxExempt: Boolean! """ - Specifies if taxes are included in the line item and shipping line prices. + Whether taxes are included in the line item and shipping line prices. """ taxesIncluded: Boolean! """ - The sum of all the prices of all the items in the checkout, taxes and discounts included. + The sum of all the duties applied to the line items in the checkout. """ - totalPrice: Money! @deprecated(reason: "Use `totalPriceV2` instead") + totalDuties: MoneyV2 """ - The sum of all the prices of all the items in the checkout, duties, taxes and discounts included. + The sum of all the prices of all the items in the checkout, taxes and discounts included. + """ + totalPrice: Money! @deprecated(reason: "Use `totalPriceV2` instead.") + + """ + The sum of all the prices of all the items in the checkout, including duties, taxes, and discounts. """ totalPriceV2: MoneyV2! """ The sum of all the taxes applied to the line items and shipping lines in the checkout. """ - totalTax: Money! @deprecated(reason: "Use `totalTaxV2` instead") + totalTax: Money! @deprecated(reason: "Use `totalTaxV2` instead.") """ The sum of all the taxes applied to the line items and shipping lines in the checkout. @@ -810,57 +1637,12 @@ type Checkout implements Node { webUrl: URL! } -""" -Specifies the fields required to update a checkout's attributes. -""" -input CheckoutAttributesUpdateInput { - """ - The text of an optional note that a shop owner can attach to the checkout. - """ - note: String - - """ - A list of extra information that is added to the checkout. - """ - customAttributes: [AttributeInput!] - - """ - Allows setting partial addresses on a Checkout, skipping the full validation of attributes. - The required attributes are city, province, and country. - Full validation of the addresses is still done at complete time. - """ - allowPartialAddresses: Boolean -} - -""" -Return type for `checkoutAttributesUpdate` mutation. -""" -type CheckoutAttributesUpdatePayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - """ Specifies the fields required to update a checkout's attributes. """ input CheckoutAttributesUpdateV2Input { - """ - The text of an optional note that a shop owner can attach to the checkout. - """ - note: String + "Allows setting partial addresses on a Checkout, skipping the full validation of attributes.\nThe required attributes are city, province, and country.\nFull validation of the addresses is still done at completion time. Defaults to `false` with \neach operation.\n" + allowPartialAddresses: Boolean = false """ A list of extra information that is added to the checkout. @@ -868,11 +1650,9 @@ input CheckoutAttributesUpdateV2Input { customAttributes: [AttributeInput!] """ - Allows setting partial addresses on a Checkout, skipping the full validation of attributes. - The required attributes are city, province, and country. - Full validation of the addresses is still done at complete time. + The text of an optional note that a shop owner can attach to the checkout. """ - allowPartialAddresses: Boolean + note: String } """ @@ -885,15 +1665,33 @@ type CheckoutAttributesUpdateV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") +} + +""" +The identity of the customer associated with the checkout. +""" +type CheckoutBuyerIdentity { + """ + The country code for the checkout. For example, `CA`. + """ + countryCode: CountryCode +} + +""" +Specifies the identity of the customer associated with the checkout. +""" +input CheckoutBuyerIdentityInput { + "The country code of one of the shop's\n[enabled countries](https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/setup).\nFor example, `CA`. Including this field creates a checkout in the specified country's currency.\n" + countryCode: CountryCode! } """ @@ -906,41 +1704,15 @@ type CheckoutCompleteFreePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutCompleteWithCreditCard` mutation. -""" -type CheckoutCompleteWithCreditCardPayload { - """ - The checkout on which the payment was applied. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - A representation of the attempted payment. - """ - payment: Payment - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -953,7 +1725,7 @@ type CheckoutCompleteWithCreditCardV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! @@ -963,62 +1735,10 @@ type CheckoutCompleteWithCreditCardV2Payload { payment: Payment """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutCompleteWithTokenizedPayment` mutation. -""" -type CheckoutCompleteWithTokenizedPaymentPayload { - """ - The checkout on which the payment was applied. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - A representation of the attempted payment. - """ - payment: Payment - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutCompleteWithTokenizedPaymentV2` mutation. -""" -type CheckoutCompleteWithTokenizedPaymentV2Payload { - """ - The checkout on which the payment was applied. - """ - checkout: Checkout - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - A representation of the attempted payment. - """ - payment: Payment - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1031,7 +1751,7 @@ type CheckoutCompleteWithTokenizedPaymentV3Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! @@ -1041,16 +1761,29 @@ type CheckoutCompleteWithTokenizedPaymentV3Payload { payment: Payment """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ Specifies the fields required to create a checkout. """ input CheckoutCreateInput { + "Allows setting partial addresses on a Checkout, skipping the full validation of attributes.\nThe required attributes are city, province, and country.\nFull validation of addresses is still done at completion time. Defaults to `null`.\n" + allowPartialAddresses: Boolean + + """ + The identity of the customer associated with the checkout. + """ + buyerIdentity: CheckoutBuyerIdentityInput + + """ + A list of extra information that is added to the checkout. + """ + customAttributes: [AttributeInput!] + """ The email with which the customer wants to checkout. """ @@ -1061,34 +1794,15 @@ input CheckoutCreateInput { """ lineItems: [CheckoutLineItemInput!] - """ - The shipping address to where the line items will be shipped. - """ - shippingAddress: MailingAddressInput - """ The text of an optional note that a shop owner can attach to the checkout. """ note: String """ - A list of extra information that is added to the checkout. + The shipping address to where the line items will be shipped. """ - customAttributes: [AttributeInput!] - - """ - Allows setting partial addresses on a Checkout, skipping the full validation of attributes. - The required attributes are city, province, and country. - Full validation of addresses is still done at complete time. - """ - allowPartialAddresses: Boolean - - """ - The three-letter currency code of one of the shop's enabled presentment currencies. - Including this field creates a checkout in the specified currency. By default, new - checkouts are created in the shop's primary currency. - """ - presentmentCurrencyCode: CurrencyCode + shippingAddress: MailingAddressInput } """ @@ -1101,35 +1815,20 @@ type CheckoutCreatePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutCustomerAssociate` mutation. -""" -type CheckoutCustomerAssociatePayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - The associated customer object. - """ - customer: Customer - - """ - List of errors that occurred executing the mutation. + The checkout queue token. Available only to selected stores. + """ + queueToken: String + + """ + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1142,7 +1841,7 @@ type CheckoutCustomerAssociateV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! @@ -1152,31 +1851,10 @@ type CheckoutCustomerAssociateV2Payload { customer: Customer """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutCustomerDisassociate` mutation. -""" -type CheckoutCustomerDisassociatePayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1189,36 +1867,15 @@ type CheckoutCustomerDisassociateV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutDiscountCodeApply` mutation. -""" -type CheckoutDiscountCodeApplyPayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1231,15 +1888,15 @@ type CheckoutDiscountCodeApplyV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1252,36 +1909,15 @@ type CheckoutDiscountCodeRemovePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutEmailUpdate` mutation. -""" -type CheckoutEmailUpdatePayload { - """ - The checkout object with the updated email. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1294,145 +1930,35 @@ type CheckoutEmailUpdateV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ -Possible error codes that could be returned by CheckoutUserError. +Possible error codes that can be returned by `CheckoutUserError`. """ enum CheckoutErrorCode { - """ - Input value is blank. - """ - BLANK - - """ - Input value is invalid. - """ - INVALID - - """ - Input value is too long. - """ - TOO_LONG - - """ - Input value is not present. - """ - PRESENT - - """ - Input value should be less than maximum allowed value. - """ - LESS_THAN - - """ - Input value should be greater than or equal to minimum allowed value. - """ - GREATER_THAN_OR_EQUAL_TO - - """ - Input value should be less or equal to maximum allowed value. - """ - LESS_THAN_OR_EQUAL_TO - """ Checkout is already completed. """ ALREADY_COMPLETED - """ - Checkout is locked. - """ - LOCKED - - """ - Input value is not supported. - """ - NOT_SUPPORTED - """ Input email contains an invalid domain name. """ BAD_DOMAIN """ - Input Zip is invalid for country provided. + The input value is blank. """ - INVALID_FOR_COUNTRY - - """ - Input Zip is invalid for country and province provided. - """ - INVALID_FOR_COUNTRY_AND_PROVINCE - - """ - Invalid state in country. - """ - INVALID_STATE_IN_COUNTRY - - """ - Invalid province in country. - """ - INVALID_PROVINCE_IN_COUNTRY - - """ - Invalid region in country. - """ - INVALID_REGION_IN_COUNTRY - - """ - Shipping rate expired. - """ - SHIPPING_RATE_EXPIRED - - """ - Gift card cannot be applied to a checkout that contains a gift card. - """ - GIFT_CARD_UNUSABLE - - """ - Gift card is disabled. - """ - GIFT_CARD_DISABLED - - """ - Gift card code is invalid. - """ - GIFT_CARD_CODE_INVALID - - """ - Gift card has already been applied. - """ - GIFT_CARD_ALREADY_APPLIED - - """ - Gift card currency does not match checkout currency. - """ - GIFT_CARD_CURRENCY_MISMATCH - - """ - Gift card is expired. - """ - GIFT_CARD_EXPIRED - - """ - Gift card has no funds left. - """ - GIFT_CARD_DEPLETED - - """ - Gift card was not found. - """ - GIFT_CARD_NOT_FOUND + BLANK """ Cart does not meet discount requirements notice. @@ -1440,15 +1966,25 @@ enum CheckoutErrorCode { CART_DOES_NOT_MEET_DISCOUNT_REQUIREMENTS_NOTICE """ - Discount expired. + Customer already used once per customer discount notice. """ - DISCOUNT_EXPIRED + CUSTOMER_ALREADY_USED_ONCE_PER_CUSTOMER_DISCOUNT_NOTICE + + """ + Discount already applied. + """ + DISCOUNT_ALREADY_APPLIED """ Discount disabled. """ DISCOUNT_DISABLED + """ + Discount expired. + """ + DISCOUNT_EXPIRED + """ Discount limit reached. """ @@ -1459,87 +1995,175 @@ enum CheckoutErrorCode { """ DISCOUNT_NOT_FOUND - """ - Customer already used once per customer discount notice. - """ - CUSTOMER_ALREADY_USED_ONCE_PER_CUSTOMER_DISCOUNT_NOTICE - """ Checkout is already completed. """ EMPTY """ - Not enough in stock. + Queue token has expired. """ - NOT_ENOUGH_IN_STOCK + EXPIRED_QUEUE_TOKEN """ - Missing payment input. + Gift card has already been applied. """ - MISSING_PAYMENT_INPUT + GIFT_CARD_ALREADY_APPLIED """ - The amount of the payment does not match the value to be paid. + Gift card code is invalid. """ - TOTAL_PRICE_MISMATCH + GIFT_CARD_CODE_INVALID + + """ + Gift card currency does not match checkout currency. + """ + GIFT_CARD_CURRENCY_MISMATCH + + """ + Gift card has no funds left. + """ + GIFT_CARD_DEPLETED + + """ + Gift card is disabled. + """ + GIFT_CARD_DISABLED + + """ + Gift card is expired. + """ + GIFT_CARD_EXPIRED + + """ + Gift card was not found. + """ + GIFT_CARD_NOT_FOUND + + """ + Gift card cannot be applied to a checkout that contains a gift card. + """ + GIFT_CARD_UNUSABLE + + """ + The input value should be greater than or equal to the minimum value allowed. + """ + GREATER_THAN_OR_EQUAL_TO + + """ + Higher value discount applied. + """ + HIGHER_VALUE_DISCOUNT_APPLIED + + """ + The input value is invalid. + """ + INVALID + + """ + Cannot specify country and presentment currency code. + """ + INVALID_COUNTRY_AND_CURRENCY + + """ + Input Zip is invalid for country provided. + """ + INVALID_FOR_COUNTRY + + """ + Input Zip is invalid for country and province provided. + """ + INVALID_FOR_COUNTRY_AND_PROVINCE + + """ + Invalid province in country. + """ + INVALID_PROVINCE_IN_COUNTRY + + """ + Queue token is invalid. + """ + INVALID_QUEUE_TOKEN + + """ + Invalid region in country. + """ + INVALID_REGION_IN_COUNTRY + + """ + Invalid state in country. + """ + INVALID_STATE_IN_COUNTRY + + """ + The input value should be less than the maximum value allowed. + """ + LESS_THAN + + """ + The input value should be less than or equal to the maximum value allowed. + """ + LESS_THAN_OR_EQUAL_TO """ Line item was not found in checkout. """ LINE_ITEM_NOT_FOUND + """ + Checkout is locked. + """ + LOCKED + + """ + Maximum number of discount codes limit reached. + """ + MAXIMUM_DISCOUNT_CODE_LIMIT_REACHED + + """ + Missing payment input. + """ + MISSING_PAYMENT_INPUT + + """ + Not enough in stock. + """ + NOT_ENOUGH_IN_STOCK + + """ + Input value is not supported. + """ + NOT_SUPPORTED + + """ + The input value needs to be blank. + """ + PRESENT + + """ + Shipping rate expired. + """ + SHIPPING_RATE_EXPIRED + + """ + Throttled during checkout. + """ + THROTTLED_DURING_CHECKOUT + + """ + The input value is too long. + """ + TOO_LONG + + """ + The amount of the payment does not match the value to be paid. + """ + TOTAL_PRICE_MISMATCH + """ Unable to apply discount. """ UNABLE_TO_APPLY - - """ - Discount already applied. - """ - DISCOUNT_ALREADY_APPLIED -} - -""" -Return type for `checkoutGiftCardApply` mutation. -""" -type CheckoutGiftCardApplyPayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutGiftCardRemove` mutation. -""" -type CheckoutGiftCardRemovePayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") } """ @@ -1552,15 +2176,15 @@ type CheckoutGiftCardRemoveV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1573,15 +2197,15 @@ type CheckoutGiftCardsAppendPayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1599,7 +2223,7 @@ type CheckoutLineItem implements Node { discountAllocations: [DiscountAllocation!]! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -1624,24 +2248,25 @@ type CheckoutLineItem implements Node { variant: ProductVariant } -""" -An auto-generated type for paginating through multiple CheckoutLineItems. -""" +"An auto-generated type for paginating through multiple CheckoutLineItems.\n" type CheckoutLineItemConnection { """ A list of edges. """ edges: [CheckoutLineItemEdge!]! + """ + A list of the nodes contained in CheckoutLineItemEdge. + """ + nodes: [CheckoutLineItem!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one CheckoutLineItem and a cursor during pagination. -""" +"An auto-generated type which holds one CheckoutLineItem and a cursor during pagination.\n" type CheckoutLineItemEdge { """ A cursor for use in pagination. @@ -1678,25 +2303,25 @@ input CheckoutLineItemInput { Specifies the input fields to update a line item on the checkout. """ input CheckoutLineItemUpdateInput { + """ + Extra information in the form of an array of Key-Value pairs about the line item. + """ + customAttributes: [AttributeInput!] + """ The identifier of the line item. """ id: ID - """ - The variant identifier of the line item. - """ - variantId: ID - """ The quantity of the line item. """ quantity: Int """ - Extra information in the form of an array of Key-Value pairs about the line item. + The variant identifier of the line item. """ - customAttributes: [AttributeInput!] + variantId: ID } """ @@ -1709,15 +2334,15 @@ type CheckoutLineItemsAddPayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1730,15 +2355,15 @@ type CheckoutLineItemsRemovePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1751,7 +2376,7 @@ type CheckoutLineItemsReplacePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [CheckoutUserError!]! } @@ -1766,36 +2391,15 @@ type CheckoutLineItemsUpdatePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") -} - -""" -Return type for `checkoutShippingAddressUpdate` mutation. -""" -type CheckoutShippingAddressUpdatePayload { - """ - The updated checkout object. - """ - checkout: Checkout! - - """ - List of errors that occurred executing the mutation. - """ - checkoutUserErrors: [CheckoutUserError!]! - - """ - List of errors that occurred executing the mutation. - """ - userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1808,15 +2412,15 @@ type CheckoutShippingAddressUpdateV2Payload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1829,15 +2433,15 @@ type CheckoutShippingLineUpdatePayload { checkout: Checkout """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ checkoutUserErrors: [CheckoutUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `checkoutUserErrors` instead") + @deprecated(reason: "Use `checkoutUserErrors` instead.") } """ @@ -1845,12 +2449,12 @@ Represents an error that happens during execution of a checkout mutation. """ type CheckoutUserError implements DisplayableError { """ - Error code to uniquely identify the error. + The error code. """ code: CheckoutErrorCode """ - Path to the input field which caused the error. + The path to the input field that caused the error. """ field: [String!] @@ -1863,7 +2467,7 @@ type CheckoutUserError implements DisplayableError { """ A collection represents a grouping of products that a shop owner can create to organize them or make their shops easier to browse. """ -type Collection implements Node { +type Collection implements HasMetafields & Node & OnlineStorePublishable { """ Stripped description of the collection, single line with HTML tags removed. """ @@ -1879,66 +2483,76 @@ type Collection implements Node { """ descriptionHtml: HTML! - """ - A human-friendly unique string for the collection automatically generated from its title. - Limit of 255 characters. - """ + "A human-friendly unique string for the collection automatically generated from its title.\nLimit of 255 characters.\n" handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! """ Image associated with the collection. """ - image( + image: Image + + """ + Returns a metafield found by namespace and key. + """ + metafield( """ - Image width in pixels between 1 and 2048. This argument is deprecated: Use `maxWidth` on `Image.transformedSrc` instead. + The identifier for the metafield. """ - maxWidth: Int + key: String! """ - Image height in pixels between 1 and 2048. This argument is deprecated: Use `maxHeight` on `Image.transformedSrc` instead. + A container for a set of metafields. """ - maxHeight: Int + namespace: String! + ): Metafield + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( """ - Crops the image according to the specified region. This argument is deprecated: Use `crop` on `Image.transformedSrc` instead. + The list of metafields to retrieve by namespace and key. """ - crop: CropRegion + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! - """ - Image size multiplier for high-resolution retina displays. Must be between 1 and 3. This argument is deprecated: Use `scale` on `Image.transformedSrc` instead. - """ - scale: Int = 1 - ): Image + """ + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. + """ + onlineStoreUrl: URL """ List of products in the collection. """ products( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns a subset of products matching all product filters. + """ + filters: [ProductFilter!] + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -1950,6 +2564,11 @@ type Collection implements Node { sortKey: ProductCollectionSortKeys = COLLECTION_DEFAULT ): ProductConnection! + """ + The collection's SEO information. + """ + seo: SEO! + """ The collection’s name. Limit of 255 characters. """ @@ -1961,24 +2580,25 @@ type Collection implements Node { updatedAt: DateTime! } -""" -An auto-generated type for paginating through multiple Collections. -""" +"An auto-generated type for paginating through multiple Collections.\n" type CollectionConnection { """ A list of edges. """ edges: [CollectionEdge!]! + """ + A list of the nodes contained in CollectionEdge. + """ + nodes: [Collection!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Collection and a cursor during pagination. -""" +"An auto-generated type which holds one Collection and a cursor during pagination.\n" type CollectionEdge { """ A cursor for use in pagination. @@ -1995,6 +2615,14 @@ type CollectionEdge { The set of valid sort keys for the Collection query. """ enum CollectionSortKeys { + """ + Sort by the `id` value. + """ + ID + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE + """ Sort by the `title` value. """ @@ -2004,18 +2632,6 @@ enum CollectionSortKeys { Sort by the `updated_at` value. """ UPDATED_AT - - """ - Sort by the `id` value. - """ - ID - - """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. - """ - RELEVANCE } """ @@ -2043,7 +2659,7 @@ type Comment implements Node { contentHtml: HTML! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! } @@ -2063,24 +2679,25 @@ type CommentAuthor { name: String! } -""" -An auto-generated type for paginating through multiple Comments. -""" +"An auto-generated type for paginating through multiple Comments.\n" type CommentConnection { """ A list of edges. """ edges: [CommentEdge!]! + """ + A list of the nodes contained in CommentEdge. + """ + nodes: [Comment!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Comment and a cursor during pagination. -""" +"An auto-generated type which holds one Comment and a cursor during pagination.\n" type CommentEdge { """ A cursor for use in pagination. @@ -2094,28 +2711,41 @@ type CommentEdge { } """ -ISO 3166-1 alpha-2 country codes with some differences. +A country. """ +type Country { + """ + The languages available for the country. + """ + availableLanguages: [Language!]! + + """ + The currency of the country. + """ + currency: Currency! + + """ + The ISO code of the country. + """ + isoCode: CountryCode! + + """ + The name of the country. + """ + name: String! + + """ + The unit system used in the country. + """ + unitSystem: UnitSystem! +} + +"The code designating a country/region, which generally follows ISO 3166-1 alpha-2 guidelines.\nIf a territory doesn't have a country code value in the `CountryCode` enum, then it might be considered a subdivision\nof another country. For example, the territories associated with Spain are represented by the country code `ES`,\nand the territories associated with the United States of America are represented by the country code `US`.\n" enum CountryCode { """ - Afghanistan. + Ascension Island. """ - AF - - """ - Åland Islands. - """ - AX - - """ - Albania. - """ - AL - - """ - Algeria. - """ - DZ + AC """ Andorra. @@ -2123,14 +2753,14 @@ enum CountryCode { AD """ - Angola. + United Arab Emirates. """ - AO + AE """ - Anguilla. + Afghanistan. """ - AI + AF """ Antigua & Barbuda. @@ -2138,9 +2768,14 @@ enum CountryCode { AG """ - Argentina. + Anguilla. """ - AR + AI + + """ + Albania. + """ + AL """ Armenia. @@ -2148,144 +2783,109 @@ enum CountryCode { AM """ - Aruba. + Netherlands Antilles. """ - AW + AN """ - Ascension Island. + Angola. """ - AC + AO """ - Australia. + Argentina. """ - AU + AR """ Austria. """ AT + """ + Australia. + """ + AU + + """ + Aruba. + """ + AW + + """ + Åland Islands. + """ + AX + """ Azerbaijan. """ AZ - """ - Bahamas. - """ - BS - - """ - Bahrain. - """ - BH - - """ - Bangladesh. - """ - BD - - """ - Barbados. - """ - BB - - """ - Belarus. - """ - BY - - """ - Belgium. - """ - BE - - """ - Belize. - """ - BZ - - """ - Benin. - """ - BJ - - """ - Bermuda. - """ - BM - - """ - Bhutan. - """ - BT - - """ - Bolivia. - """ - BO - """ Bosnia & Herzegovina. """ BA """ - Botswana. + Barbados. """ - BW + BB """ - Bouvet Island. + Bangladesh. """ - BV + BD """ - Brazil. + Belgium. """ - BR - - """ - British Indian Ocean Territory. - """ - IO - - """ - Brunei. - """ - BN - - """ - Bulgaria. - """ - BG + BE """ Burkina Faso. """ BF + """ + Bulgaria. + """ + BG + + """ + Bahrain. + """ + BH + """ Burundi. """ BI """ - Cambodia. + Benin. """ - KH + BJ """ - Canada. + St. Barthélemy. """ - CA + BL """ - Cape Verde. + Bermuda. """ - CV + BM + + """ + Brunei. + """ + BN + + """ + Bolivia. + """ + BO """ Caribbean Netherlands. @@ -2293,34 +2893,44 @@ enum CountryCode { BQ """ - Cayman Islands. + Brazil. """ - KY + BR """ - Central African Republic. + Bahamas. """ - CF + BS """ - Chad. + Bhutan. """ - TD + BT """ - Chile. + Bouvet Island. """ - CL + BV """ - China. + Botswana. """ - CN + BW """ - Christmas Island. + Belarus. """ - CX + BY + + """ + Belize. + """ + BZ + + """ + Canada. + """ + CA """ Cocos (Keeling) Islands. @@ -2328,14 +2938,14 @@ enum CountryCode { CC """ - Colombia. + Congo - Kinshasa. """ - CO + CD """ - Comoros. + Central African Republic. """ - KM + CF """ Congo - Brazzaville. @@ -2343,35 +2953,65 @@ enum CountryCode { CG """ - Congo - Kinshasa. + Switzerland. """ - CD + CH + + """ + Côte d’Ivoire. + """ + CI """ Cook Islands. """ CK + """ + Chile. + """ + CL + + """ + Cameroon. + """ + CM + + """ + China. + """ + CN + + """ + Colombia. + """ + CO + """ Costa Rica. """ CR - """ - Croatia. - """ - HR - """ Cuba. """ CU + """ + Cape Verde. + """ + CV + """ Curaçao. """ CW + """ + Christmas Island. + """ + CX + """ Cyprus. """ @@ -2383,20 +3023,20 @@ enum CountryCode { CZ """ - Côte d’Ivoire. + Germany. """ - CI - - """ - Denmark. - """ - DK + DE """ Djibouti. """ DJ + """ + Denmark. + """ + DK + """ Dominica. """ @@ -2407,46 +3047,56 @@ enum CountryCode { """ DO + """ + Algeria. + """ + DZ + """ Ecuador. """ EC - """ - Egypt. - """ - EG - - """ - El Salvador. - """ - SV - - """ - Equatorial Guinea. - """ - GQ - - """ - Eritrea. - """ - ER - """ Estonia. """ EE """ - Eswatini. + Egypt. """ - SZ + EG + + """ + Western Sahara. + """ + EH + + """ + Eritrea. + """ + ER + + """ + Spain. + """ + ES """ Ethiopia. """ ET + """ + Finland. + """ + FI + + """ + Fiji. + """ + FJ + """ Falkland Islands. """ @@ -2457,45 +3107,25 @@ enum CountryCode { """ FO - """ - Fiji. - """ - FJ - - """ - Finland. - """ - FI - """ France. """ FR - """ - French Guiana. - """ - GF - - """ - French Polynesia. - """ - PF - - """ - French Southern Territories. - """ - TF - """ Gabon. """ GA """ - Gambia. + United Kingdom. """ - GM + GB + + """ + Grenada. + """ + GD """ Georgia. @@ -2503,9 +3133,14 @@ enum CountryCode { GE """ - Germany. + French Guiana. """ - DE + GF + + """ + Guernsey. + """ + GG """ Ghana. @@ -2517,41 +3152,46 @@ enum CountryCode { """ GI - """ - Greece. - """ - GR - """ Greenland. """ GL """ - Grenada. + Gambia. """ - GD + GM + + """ + Guinea. + """ + GN """ Guadeloupe. """ GP + """ + Equatorial Guinea. + """ + GQ + + """ + Greece. + """ + GR + + """ + South Georgia & South Sandwich Islands. + """ + GS + """ Guatemala. """ GT - """ - Guernsey. - """ - GG - - """ - Guinea. - """ - GN - """ Guinea-Bissau. """ @@ -2563,124 +3203,144 @@ enum CountryCode { GY """ - Haiti. + Hong Kong SAR. """ - HT + HK """ Heard & McDonald Islands. """ HM - """ - Vatican City. - """ - VA - """ Honduras. """ HN """ - Hong Kong SAR. + Croatia. """ - HK + HR + + """ + Haiti. + """ + HT """ Hungary. """ HU - """ - Iceland. - """ - IS - - """ - India. - """ - IN - """ Indonesia. """ ID - """ - Iran. - """ - IR - - """ - Iraq. - """ - IQ - """ Ireland. """ IE + """ + Israel. + """ + IL + """ Isle of Man. """ IM """ - Israel. + India. """ - IL + IN + + """ + British Indian Ocean Territory. + """ + IO + + """ + Iraq. + """ + IQ + + """ + Iran. + """ + IR + + """ + Iceland. + """ + IS """ Italy. """ IT - """ - Jamaica. - """ - JM - - """ - Japan. - """ - JP - """ Jersey. """ JE + """ + Jamaica. + """ + JM + """ Jordan. """ JO """ - Kazakhstan. + Japan. """ - KZ + JP """ Kenya. """ KE + """ + Kyrgyzstan. + """ + KG + + """ + Cambodia. + """ + KH + """ Kiribati. """ KI + """ + Comoros. + """ + KM + + """ + St. Kitts & Nevis. + """ + KN + """ North Korea. """ KP """ - Kosovo. + South Korea. """ - XK + KR """ Kuwait. @@ -2688,29 +3348,39 @@ enum CountryCode { KW """ - Kyrgyzstan. + Cayman Islands. """ - KG + KY + + """ + Kazakhstan. + """ + KZ """ Laos. """ LA - """ - Latvia. - """ - LV - """ Lebanon. """ LB """ - Lesotho. + St. Lucia. """ - LS + LC + + """ + Liechtenstein. + """ + LI + + """ + Sri Lanka. + """ + LK """ Liberia. @@ -2718,14 +3388,9 @@ enum CountryCode { LR """ - Libya. + Lesotho. """ - LY - - """ - Liechtenstein. - """ - LI + LS """ Lithuania. @@ -2738,9 +3403,39 @@ enum CountryCode { LU """ - Macao SAR. + Latvia. """ - MO + LV + + """ + Libya. + """ + LY + + """ + Morocco. + """ + MA + + """ + Monaco. + """ + MC + + """ + Moldova. + """ + MD + + """ + Montenegro. + """ + ME + + """ + St. Martin. + """ + MF """ Madagascar. @@ -2748,19 +3443,9 @@ enum CountryCode { MG """ - Malawi. + North Macedonia. """ - MW - - """ - Malaysia. - """ - MY - - """ - Maldives. - """ - MV + MK """ Mali. @@ -2768,9 +3453,19 @@ enum CountryCode { ML """ - Malta. + Myanmar (Burma). """ - MT + MM + + """ + Mongolia. + """ + MN + + """ + Macao SAR. + """ + MO """ Martinique. @@ -2782,15 +3477,30 @@ enum CountryCode { """ MR + """ + Montserrat. + """ + MS + + """ + Malta. + """ + MT + """ Mauritius. """ MU """ - Mayotte. + Maldives. """ - YT + MV + + """ + Malawi. + """ + MW """ Mexico. @@ -2798,180 +3508,145 @@ enum CountryCode { MX """ - Moldova. + Malaysia. """ - MD - - """ - Monaco. - """ - MC - - """ - Mongolia. - """ - MN - - """ - Montenegro. - """ - ME - - """ - Montserrat. - """ - MS - - """ - Morocco. - """ - MA + MY """ Mozambique. """ MZ - """ - Myanmar (Burma). - """ - MM - """ Namibia. """ NA - """ - Nauru. - """ - NR - - """ - Nepal. - """ - NP - - """ - Netherlands. - """ - NL - - """ - Netherlands Antilles. - """ - AN - """ New Caledonia. """ NC - """ - New Zealand. - """ - NZ - - """ - Nicaragua. - """ - NI - """ Niger. """ NE - """ - Nigeria. - """ - NG - - """ - Niue. - """ - NU - """ Norfolk Island. """ NF """ - North Macedonia. + Nigeria. """ - MK + NG + + """ + Nicaragua. + """ + NI + + """ + Netherlands. + """ + NL """ Norway. """ NO + """ + Nepal. + """ + NP + + """ + Nauru. + """ + NR + + """ + Niue. + """ + NU + + """ + New Zealand. + """ + NZ + """ Oman. """ OM - """ - Pakistan. - """ - PK - - """ - Palestinian Territories. - """ - PS - """ Panama. """ PA - """ - Papua New Guinea. - """ - PG - - """ - Paraguay. - """ - PY - """ Peru. """ PE + """ + French Polynesia. + """ + PF + + """ + Papua New Guinea. + """ + PG + """ Philippines. """ PH """ - Pitcairn Islands. + Pakistan. """ - PN + PK """ Poland. """ PL + """ + St. Pierre & Miquelon. + """ + PM + + """ + Pitcairn Islands. + """ + PN + + """ + Palestinian Territories. + """ + PS + """ Portugal. """ PT + """ + Paraguay. + """ + PY + """ Qatar. """ QA - """ - Cameroon. - """ - CM - """ Réunion. """ @@ -2982,6 +3657,11 @@ enum CountryCode { """ RO + """ + Serbia. + """ + RS + """ Russia. """ @@ -2992,140 +3672,20 @@ enum CountryCode { """ RW - """ - St. Barthélemy. - """ - BL - - """ - St. Helena. - """ - SH - - """ - St. Kitts & Nevis. - """ - KN - - """ - St. Lucia. - """ - LC - - """ - St. Martin. - """ - MF - - """ - St. Pierre & Miquelon. - """ - PM - - """ - Samoa. - """ - WS - - """ - San Marino. - """ - SM - - """ - São Tomé & Príncipe. - """ - ST - """ Saudi Arabia. """ SA - """ - Senegal. - """ - SN - - """ - Serbia. - """ - RS - - """ - Seychelles. - """ - SC - - """ - Sierra Leone. - """ - SL - - """ - Singapore. - """ - SG - - """ - Sint Maarten. - """ - SX - - """ - Slovakia. - """ - SK - - """ - Slovenia. - """ - SI - """ Solomon Islands. """ SB """ - Somalia. + Seychelles. """ - SO - - """ - South Africa. - """ - ZA - - """ - South Georgia & South Sandwich Islands. - """ - GS - - """ - South Korea. - """ - KR - - """ - South Sudan. - """ - SS - - """ - Spain. - """ - ES - - """ - Sri Lanka. - """ - LK - - """ - St. Vincent & Grenadines. - """ - VC + SC """ Sudan. @@ -3133,9 +3693,24 @@ enum CountryCode { SD """ - Suriname. + Sweden. """ - SR + SE + + """ + Singapore. + """ + SG + + """ + St. Helena. + """ + SH + + """ + Slovenia. + """ + SI """ Svalbard & Jan Mayen. @@ -3143,14 +3718,54 @@ enum CountryCode { SJ """ - Sweden. + Slovakia. """ - SE + SK """ - Switzerland. + Sierra Leone. """ - CH + SL + + """ + San Marino. + """ + SM + + """ + Senegal. + """ + SN + + """ + Somalia. + """ + SO + + """ + Suriname. + """ + SR + + """ + South Sudan. + """ + SS + + """ + São Tomé & Príncipe. + """ + ST + + """ + El Salvador. + """ + SV + + """ + Sint Maarten. + """ + SX """ Syria. @@ -3158,49 +3773,9 @@ enum CountryCode { SY """ - Taiwan. + Eswatini. """ - TW - - """ - Tajikistan. - """ - TJ - - """ - Tanzania. - """ - TZ - - """ - Thailand. - """ - TH - - """ - Timor-Leste. - """ - TL - - """ - Togo. - """ - TG - - """ - Tokelau. - """ - TK - - """ - Tonga. - """ - TO - - """ - Trinidad & Tobago. - """ - TT + SZ """ Tristan da Cunha. @@ -3208,14 +3783,44 @@ enum CountryCode { TA """ - Tunisia. + Turks & Caicos Islands. """ - TN + TC """ - Turkey. + Chad. """ - TR + TD + + """ + French Southern Territories. + """ + TF + + """ + Togo. + """ + TG + + """ + Thailand. + """ + TH + + """ + Tajikistan. + """ + TJ + + """ + Tokelau. + """ + TK + + """ + Timor-Leste. + """ + TL """ Turkmenistan. @@ -3223,9 +3828,24 @@ enum CountryCode { TM """ - Turks & Caicos Islands. + Tunisia. """ - TC + TN + + """ + Tonga. + """ + TO + + """ + Turkey. + """ + TR + + """ + Trinidad & Tobago. + """ + TT """ Tuvalu. @@ -3233,9 +3853,14 @@ enum CountryCode { TV """ - Uganda. + Taiwan. """ - UG + TW + + """ + Tanzania. + """ + TZ """ Ukraine. @@ -3243,25 +3868,20 @@ enum CountryCode { UA """ - United Arab Emirates. + Uganda. """ - AE - - """ - United Kingdom. - """ - GB - - """ - United States. - """ - US + UG """ U.S. Outlying Islands. """ UM + """ + United States. + """ + US + """ Uruguay. """ @@ -3273,24 +3893,34 @@ enum CountryCode { UZ """ - Vanuatu. + Vatican City. """ - VU + VA + + """ + St. Vincent & Grenadines. + """ + VC """ Venezuela. """ VE + """ + British Virgin Islands. + """ + VG + """ Vietnam. """ VN """ - British Virgin Islands. + Vanuatu. """ - VG + VU """ Wallis & Futuna. @@ -3298,15 +3928,30 @@ enum CountryCode { WF """ - Western Sahara. + Samoa. """ - EH + WS + + """ + Kosovo. + """ + XK """ Yemen. """ YE + """ + Mayotte. + """ + YT + + """ + South Africa. + """ + ZA + """ Zambia. """ @@ -3316,6 +3961,11 @@ enum CountryCode { Zimbabwe. """ ZW + + """ + Unknown Region. + """ + ZZ } """ @@ -3363,87 +4013,48 @@ type CreditCard { maskedNumber: String } -""" -Specifies the fields required to complete a checkout with -a Shopify vaulted credit card payment. -""" -input CreditCardPaymentInput { - """ - The amount of the payment. - """ - amount: Money! - - """ - A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). - """ - idempotencyKey: String! - +"Specifies the fields required to complete a checkout with\na Shopify vaulted credit card payment.\n" +input CreditCardPaymentInputV2 { """ The billing address for the payment. """ billingAddress: MailingAddressInput! """ - The ID returned by Shopify's Card Vault. + A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests). """ - vaultId: String! + idempotencyKey: String! - """ - Executes the payment in test mode if possible. Defaults to `false`. - """ - test: Boolean -} - -""" -Specifies the fields required to complete a checkout with -a Shopify vaulted credit card payment. -""" -input CreditCardPaymentInputV2 { """ The amount and currency of the payment. """ paymentAmount: MoneyInput! """ - A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). + Executes the payment in test mode if possible. Defaults to `false`. """ - idempotencyKey: String! - - """ - The billing address for the payment. - """ - billingAddress: MailingAddressInput! + test: Boolean = false """ The ID returned by Shopify's Card Vault. """ vaultId: String! - - """ - Executes the payment in test mode if possible. Defaults to `false`. - """ - test: Boolean } """ The part of the image that should remain after cropping. """ enum CropRegion { - """ - Keep the center of the image. - """ - CENTER - - """ - Keep the top of the image. - """ - TOP - """ Keep the bottom of the image. """ BOTTOM + """ + Keep the center of the image. + """ + CENTER + """ Keep the left of the image. """ @@ -3453,31 +4064,39 @@ enum CropRegion { Keep the right of the image. """ RIGHT + + """ + Keep the top of the image. + """ + TOP } """ -Currency codes. +A currency. """ +type Currency { + """ + The ISO code of the currency. + """ + isoCode: CurrencyCode! + + """ + The name of the currency. + """ + name: String! + + """ + The symbol of the currency. + """ + symbol: String! +} + +"The three-letter currency codes that represent the world currencies used in stores. These include standard ISO 4217 codes, legacy codes,\nand non-standard codes.\n" enum CurrencyCode { """ - United States Dollars (USD). + United Arab Emirates Dirham (AED). """ - USD - - """ - Euro (EUR). - """ - EUR - - """ - United Kingdom Pounds (GBP). - """ - GBP - - """ - Canadian Dollars (CAD). - """ - CAD + AED """ Afghan Afghani (AFN). @@ -3490,9 +4109,14 @@ enum CurrencyCode { ALL """ - Algerian Dinar (DZD). + Armenian Dram (AMD). """ - DZD + AMD + + """ + Netherlands Antillean Guilder. + """ + ANG """ Angolan Kwanza (AOA). @@ -3505,9 +4129,9 @@ enum CurrencyCode { ARS """ - Armenian Dram (AMD). + Australian Dollars (AUD). """ - AMD + AUD """ Aruban Florin (AWG). @@ -3515,29 +4139,29 @@ enum CurrencyCode { AWG """ - Australian Dollars (AUD). + Azerbaijani Manat (AZN). """ - AUD + AZN + + """ + Bosnia and Herzegovina Convertible Mark (BAM). + """ + BAM """ Barbadian Dollar (BBD). """ BBD - """ - Azerbaijani Manat (AZN). - """ - AZN - """ Bangladesh Taka (BDT). """ BDT """ - Bahamian Dollar (BSD). + Bulgarian Lev (BGN). """ - BSD + BGN """ Bahraini Dinar (BHD). @@ -3549,75 +4173,73 @@ enum CurrencyCode { """ BIF - """ - Belize Dollar (BZD). - """ - BZD - """ Bermudian Dollar (BMD). """ BMD - """ - Bhutanese Ngultrum (BTN). - """ - BTN - - """ - Bosnia and Herzegovina Convertible Mark (BAM). - """ - BAM - - """ - Brazilian Real (BRL). - """ - BRL - - """ - Bolivian Boliviano (BOB). - """ - BOB - - """ - Botswana Pula (BWP). - """ - BWP - """ Brunei Dollar (BND). """ BND """ - Bulgarian Lev (BGN). + Bolivian Boliviano (BOB). """ - BGN + BOB """ - Burmese Kyat (MMK). + Brazilian Real (BRL). """ - MMK + BRL """ - Cambodian Riel. + Bahamian Dollar (BSD). """ - KHR + BSD """ - Cape Verdean escudo (CVE). + Bhutanese Ngultrum (BTN). """ - CVE + BTN """ - Cayman Dollars (KYD). + Botswana Pula (BWP). """ - KYD + BWP """ - Central African CFA Franc (XAF). + Belarusian Ruble (BYN). """ - XAF + BYN + + """ + Belarusian Ruble (BYR). + """ + BYR + @deprecated( + reason: "`BYR` is deprecated. Use `BYN` available from version `2021-01` onwards instead." + ) + + """ + Belize Dollar (BZD). + """ + BZD + + """ + Canadian Dollars (CAD). + """ + CAD + + """ + Congolese franc (CDF). + """ + CDF + + """ + Swiss Francs (CHF). + """ + CHF """ Chilean Peso (CLP). @@ -3634,31 +4256,26 @@ enum CurrencyCode { """ COP - """ - Comorian Franc (KMF). - """ - KMF - - """ - Congolese franc (CDF). - """ - CDF - """ Costa Rican Colones (CRC). """ CRC """ - Croatian Kuna (HRK). + Cape Verdean escudo (CVE). """ - HRK + CVE """ Czech Koruny (CZK). """ CZK + """ + Djiboutian Franc (DJF). + """ + DJF + """ Danish Kroner (DKK). """ @@ -3670,24 +4287,29 @@ enum CurrencyCode { DOP """ - East Caribbean Dollar (XCD). + Algerian Dinar (DZD). """ - XCD + DZD """ Egyptian Pound (EGP). """ EGP + """ + Eritrean Nakfa (ERN). + """ + ERN + """ Ethiopian Birr (ETB). """ ETB """ - CFP Franc (XPF). + Euro (EUR). """ - XPF + EUR """ Fijian Dollars (FJD). @@ -3695,15 +4317,40 @@ enum CurrencyCode { FJD """ - Gambian Dalasi (GMD). + Falkland Islands Pounds (FKP). """ - GMD + FKP + + """ + United Kingdom Pounds (GBP). + """ + GBP + + """ + Georgian Lari (GEL). + """ + GEL """ Ghanaian Cedi (GHS). """ GHS + """ + Gibraltar Pounds (GIP). + """ + GIP + + """ + Gambian Dalasi (GMD). + """ + GMD + + """ + Guinean Franc (GNF). + """ + GNF + """ Guatemalan Quetzal (GTQ). """ @@ -3715,14 +4362,9 @@ enum CurrencyCode { GYD """ - Georgian Lari (GEL). + Hong Kong Dollars (HKD). """ - GEL - - """ - Haitian Gourde (HTG). - """ - HTG + HKD """ Honduran Lempira (HNL). @@ -3730,25 +4372,20 @@ enum CurrencyCode { HNL """ - Hong Kong Dollars (HKD). + Croatian Kuna (HRK). """ - HKD + HRK + + """ + Haitian Gourde (HTG). + """ + HTG """ Hungarian Forint (HUF). """ HUF - """ - Icelandic Kronur (ISK). - """ - ISK - - """ - Indian Rupees (INR). - """ - INR - """ Indonesian Rupiah (IDR). """ @@ -3759,81 +4396,141 @@ enum CurrencyCode { """ ILS + """ + Indian Rupees (INR). + """ + INR + """ Iraqi Dinar (IQD). """ IQD """ - Jamaican Dollars (JMD). + Iranian Rial (IRR). """ - JMD + IRR """ - Japanese Yen (JPY). + Icelandic Kronur (ISK). """ - JPY + ISK """ Jersey Pound. """ JEP + """ + Jamaican Dollars (JMD). + """ + JMD + """ Jordanian Dinar (JOD). """ JOD """ - Kazakhstani Tenge (KZT). + Japanese Yen (JPY). """ - KZT + JPY """ Kenyan Shilling (KES). """ KES + """ + Kyrgyzstani Som (KGS). + """ + KGS + + """ + Cambodian Riel. + """ + KHR + + """ + Kiribati Dollar (KID). + """ + KID + + """ + Comorian Franc (KMF). + """ + KMF + + """ + South Korean Won (KRW). + """ + KRW + """ Kuwaiti Dinar (KWD). """ KWD """ - Kyrgyzstani Som (KGS). + Cayman Dollars (KYD). """ - KGS + KYD + + """ + Kazakhstani Tenge (KZT). + """ + KZT """ Laotian Kip (LAK). """ LAK - """ - Latvian Lati (LVL). - """ - LVL - """ Lebanese Pounds (LBP). """ LBP """ - Lesotho Loti (LSL). + Sri Lankan Rupees (LKR). """ - LSL + LKR """ Liberian Dollar (LRD). """ LRD + """ + Lesotho Loti (LSL). + """ + LSL + """ Lithuanian Litai (LTL). """ LTL + """ + Latvian Lati (LVL). + """ + LVL + + """ + Libyan Dinar (LYD). + """ + LYD + + """ + Moroccan Dirham. + """ + MAD + + """ + Moldovan Leu (MDL). + """ + MDL + """ Malagasy Ariary (MGA). """ @@ -3844,21 +4541,41 @@ enum CurrencyCode { """ MKD + """ + Burmese Kyat (MMK). + """ + MMK + + """ + Mongolian Tugrik. + """ + MNT + """ Macanese Pataca (MOP). """ MOP """ - Malawian Kwacha (MWK). + Mauritanian Ouguiya (MRU). """ - MWK + MRU + + """ + Mauritian Rupee (MUR). + """ + MUR """ Maldivian Rufiyaa (MVR). """ MVR + """ + Malawian Kwacha (MWK). + """ + MWK + """ Mexican Pesos (MXN). """ @@ -3869,26 +4586,6 @@ enum CurrencyCode { """ MYR - """ - Mauritian Rupee (MUR). - """ - MUR - - """ - Moldovan Leu (MDL). - """ - MDL - - """ - Moroccan Dirham. - """ - MAD - - """ - Mongolian Tugrik. - """ - MNT - """ Mozambican Metical. """ @@ -3900,35 +4597,30 @@ enum CurrencyCode { NAD """ - Nepalese Rupee (NPR). + Nigerian Naira (NGN). """ - NPR - - """ - Netherlands Antillean Guilder. - """ - ANG - - """ - New Zealand Dollars (NZD). - """ - NZD + NGN """ Nicaraguan Córdoba (NIO). """ NIO - """ - Nigerian Naira (NGN). - """ - NGN - """ Norwegian Kroner (NOK). """ NOK + """ + Nepalese Rupee (NPR). + """ + NPR + + """ + New Zealand Dollars (NZD). + """ + NZD + """ Omani Rial (OMR). """ @@ -3940,35 +4632,35 @@ enum CurrencyCode { PAB """ - Pakistani Rupee (PKR). + Peruvian Nuevo Sol (PEN). """ - PKR + PEN """ Papua New Guinean Kina (PGK). """ PGK - """ - Paraguayan Guarani (PYG). - """ - PYG - - """ - Peruvian Nuevo Sol (PEN). - """ - PEN - """ Philippine Peso (PHP). """ PHP + """ + Pakistani Rupee (PKR). + """ + PKR + """ Polish Zlotych (PLN). """ PLN + """ + Paraguayan Guarani (PYG). + """ + PYG + """ Qatari Rial (QAR). """ @@ -3979,6 +4671,11 @@ enum CurrencyCode { """ RON + """ + Serbian dinar (RSD). + """ + RSD + """ Russian Rubles (RUB). """ @@ -3989,80 +4686,25 @@ enum CurrencyCode { """ RWF - """ - Samoan Tala (WST). - """ - WST - """ Saudi Riyal (SAR). """ SAR - """ - Sao Tome And Principe Dobra (STD). - """ - STD - - """ - Serbian dinar (RSD). - """ - RSD - - """ - Seychellois Rupee (SCR). - """ - SCR - - """ - Singapore Dollars (SGD). - """ - SGD - - """ - Sudanese Pound (SDG). - """ - SDG - - """ - Syrian Pound (SYP). - """ - SYP - - """ - South African Rand (ZAR). - """ - ZAR - - """ - South Korean Won (KRW). - """ - KRW - - """ - South Sudanese Pound (SSP). - """ - SSP - """ Solomon Islands Dollar (SBD). """ SBD """ - Sri Lankan Rupees (LKR). + Seychellois Rupee (SCR). """ - LKR + SCR """ - Surinamese Dollar (SRD). + Sudanese Pound (SDG). """ - SRD - - """ - Swazi Lilangeni (SZL). - """ - SZL + SDG """ Swedish Kronor (SEK). @@ -4070,14 +4712,57 @@ enum CurrencyCode { SEK """ - Swiss Francs (CHF). + Singapore Dollars (SGD). """ - CHF + SGD """ - Taiwan Dollars (TWD). + Saint Helena Pounds (SHP). """ - TWD + SHP + + """ + Sierra Leonean Leone (SLL). + """ + SLL + + """ + Somali Shilling (SOS). + """ + SOS + + """ + Surinamese Dollar (SRD). + """ + SRD + + """ + South Sudanese Pound (SSP). + """ + SSP + + """ + Sao Tome And Principe Dobra (STD). + """ + STD + @deprecated( + reason: "`STD` is deprecated. Use `STN` available from version `2022-07` onwards instead." + ) + + """ + Sao Tome And Principe Dobra (STN). + """ + STN + + """ + Syrian Pound (SYP). + """ + SYP + + """ + Swazi Lilangeni (SZL). + """ + SZL """ Thai baht (THB). @@ -4085,24 +4770,9 @@ enum CurrencyCode { THB """ - Tanzanian Shilling (TZS). + Tajikistani Somoni (TJS). """ - TZS - - """ - Trinidad and Tobago Dollars (TTD). - """ - TTD - - """ - Tunisian Dinar (TND). - """ - TND - - """ - Turkish Lira (TRY). - """ - TRY + TJS """ Turkmenistani Manat (TMT). @@ -4110,9 +4780,34 @@ enum CurrencyCode { TMT """ - Ugandan Shilling (UGX). + Tunisian Dinar (TND). """ - UGX + TND + + """ + Tongan Pa'anga (TOP). + """ + TOP + + """ + Turkish Lira (TRY). + """ + TRY + + """ + Trinidad and Tobago Dollars (TTD). + """ + TTD + + """ + Taiwan Dollars (TWD). + """ + TWD + + """ + Tanzanian Shilling (TZS). + """ + TZS """ Ukrainian Hryvnia (UAH). @@ -4120,9 +4815,14 @@ enum CurrencyCode { UAH """ - United Arab Emirates Dirham (AED). + Ugandan Shilling (UGX). """ - AED + UGX + + """ + United States Dollars (USD). + """ + USD """ Uruguayan Pesos (UYU). @@ -4135,125 +4835,83 @@ enum CurrencyCode { UZS """ - Vanuatu Vatu (VUV). + Venezuelan Bolivares (VED). """ - VUV + VED + + """ + Venezuelan Bolivares (VEF). + """ + VEF + @deprecated( + reason: "`VEF` is deprecated. Use `VES` available from version `2020-10` onwards instead." + ) + + """ + Venezuelan Bolivares (VES). + """ + VES """ Vietnamese đồng (VND). """ VND + """ + Vanuatu Vatu (VUV). + """ + VUV + + """ + Samoan Tala (WST). + """ + WST + + """ + Central African CFA Franc (XAF). + """ + XAF + + """ + East Caribbean Dollar (XCD). + """ + XCD + """ West African CFA franc (XOF). """ XOF + """ + CFP Franc (XPF). + """ + XPF + + """ + Unrecognized currency. + """ + XXX + """ Yemeni Rial (YER). """ YER + """ + South African Rand (ZAR). + """ + ZAR + """ Zambian Kwacha (ZMW). """ ZMW - - """ - Belarusian Ruble (BYN). - """ - BYN - - """ - Belarusian Ruble (BYR). - """ - BYR - - """ - Djiboutian Franc (DJF). - """ - DJF - - """ - Eritrean Nakfa (ERN). - """ - ERN - - """ - Falkland Islands Pounds (FKP). - """ - FKP - - """ - Gibraltar Pounds (GIP). - """ - GIP - - """ - Guinean Franc (GNF). - """ - GNF - - """ - Iranian Rial (IRR). - """ - IRR - - """ - Kiribati Dollar (KID). - """ - KID - - """ - Libyan Dinar (LYD). - """ - LYD - - """ - Mauritanian Ouguiya (MRU). - """ - MRU - - """ - Sierra Leonean Leone (SLL). - """ - SLL - - """ - Saint Helena Pounds (SHP). - """ - SHP - - """ - Somali Shilling (SOS). - """ - SOS - - """ - Tajikistani Somoni (TJS). - """ - TJS - - """ - Tongan Pa'anga (TOP). - """ - TOP - - """ - Venezuelan Bolivares (VEF). - """ - VEF - - """ - Venezuelan Bolivares (VES). - """ - VES } """ A customer represents a customer account with the shop. Customer accounts store contact information for the customer, saving logged-in customers the trouble of having to provide it at every checkout. """ -type Customer { +type Customer implements HasMetafields { """ Indicates whether the customer has consented to be sent marketing material via email. """ @@ -4263,26 +4921,26 @@ type Customer { A list of addresses for the customer. """ addresses( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -4329,29 +4987,55 @@ type Customer { """ lastName: String + """ + Returns a metafield found by namespace and key. + """ + metafield( + """ + The identifier for the metafield. + """ + key: String! + + """ + A container for a set of metafields. + """ + namespace: String! + ): Metafield + + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( + """ + The list of metafields to retrieve by namespace and key. + """ + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! + """ The orders associated with the customer. """ orders( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `processed_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -4362,15 +5046,6 @@ type Customer { Sort the underlying list by the given key. """ sortKey: OrderSortKeys = ID - - """ - Supported filter parameters: - - `processed_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): OrderConnection! """ @@ -4378,10 +5053,7 @@ type Customer { """ phone: String - """ - A comma separated list of tags that have been added to the customer. - Additional access scope required: unauthenticated_read_customer_tags. - """ + "A comma separated list of tags that have been added to the customer.\nAdditional access scope required: unauthenticated_read_customer_tags.\n" tags: [String!]! """ @@ -4430,15 +5102,15 @@ type CustomerAccessTokenCreatePayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4451,7 +5123,7 @@ type CustomerAccessTokenCreateWithMultipassPayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! } @@ -4471,7 +5143,7 @@ type CustomerAccessTokenDeletePayload { deletedCustomerAccessTokenId: String """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! } @@ -4486,7 +5158,7 @@ type CustomerAccessTokenRenewPayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! } @@ -4506,7 +5178,7 @@ type CustomerActivateByUrlPayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! } @@ -4541,15 +5213,15 @@ type CustomerActivatePayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4562,15 +5234,15 @@ type CustomerAddressCreatePayload { customerAddress: MailingAddress """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4578,7 +5250,7 @@ Return type for `customerAddressDelete` mutation. """ type CustomerAddressDeletePayload { """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! @@ -4588,10 +5260,10 @@ type CustomerAddressDeletePayload { deletedCustomerAddressId: String """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4604,21 +5276,31 @@ type CustomerAddressUpdatePayload { customerAddress: MailingAddress """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ -Specifies the fields required to create a new customer. +The fields required to create a new customer. """ input CustomerCreateInput { + """ + Indicates whether the customer has consented to be sent marketing material via email. + """ + acceptsMarketing: Boolean + + """ + The customer’s email. + """ + email: String! + """ The customer’s first name. """ @@ -4629,27 +5311,13 @@ input CustomerCreateInput { """ lastName: String - """ - The customer’s email. - """ - email: String! - - """ - A unique phone number for the customer. - - Formatted using E.164 standard. For example, _+16135551111_. - """ - phone: String - """ The login password used by the customer. """ password: String! - """ - Indicates whether the customer has consented to be sent marketing material via email. - """ - acceptsMarketing: Boolean + "A unique phone number for the customer.\n\nFormatted using E.164 standard. For example, _+16135551111_.\n" + phone: String } """ @@ -4662,15 +5330,15 @@ type CustomerCreatePayload { customer: Customer """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4683,61 +5351,36 @@ type CustomerDefaultAddressUpdatePayload { customer: Customer """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ -Possible error codes that could be returned by CustomerUserError. +Possible error codes that can be returned by `CustomerUserError`. """ enum CustomerErrorCode { """ - Input value is blank. + Customer already enabled. + """ + ALREADY_ENABLED + + """ + Input email contains an invalid domain name. + """ + BAD_DOMAIN + + """ + The input value is blank. """ BLANK - """ - Input value is invalid. - """ - INVALID - - """ - Input value is already taken. - """ - TAKEN - - """ - Input value is too long. - """ - TOO_LONG - - """ - Input value is too short. - """ - TOO_SHORT - - """ - Unidentified customer. - """ - UNIDENTIFIED_CUSTOMER - - """ - Customer is disabled. - """ - CUSTOMER_DISABLED - - """ - Input password starts or ends with whitespace. - """ - PASSWORD_STARTS_OR_ENDS_WITH_WHITESPACE - """ Input contains HTML tags. """ @@ -4749,14 +5392,19 @@ enum CustomerErrorCode { CONTAINS_URL """ - Invalid activation token. + Customer is disabled. """ - TOKEN_INVALID + CUSTOMER_DISABLED """ - Customer already enabled. + The input value is invalid. """ - ALREADY_ENABLED + INVALID + + """ + Multipass token is not valid. + """ + INVALID_MULTIPASS_REQUEST """ Address does not exist. @@ -4764,14 +5412,34 @@ enum CustomerErrorCode { NOT_FOUND """ - Input email contains an invalid domain name. + Input password starts or ends with whitespace. """ - BAD_DOMAIN + PASSWORD_STARTS_OR_ENDS_WITH_WHITESPACE """ - Multipass token is not valid. + The input value is already taken. """ - INVALID_MULTIPASS_REQUEST + TAKEN + + """ + Invalid activation token. + """ + TOKEN_INVALID + + """ + The input value is too long. + """ + TOO_LONG + + """ + The input value is too short. + """ + TOO_SHORT + + """ + Unidentified customer. + """ + UNIDENTIFIED_CUSTOMER } """ @@ -4779,15 +5447,15 @@ Return type for `customerRecover` mutation. """ type CustomerRecoverPayload { """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4805,30 +5473,30 @@ type CustomerResetByUrlPayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ Specifies the fields required to reset a customer’s password. """ input CustomerResetInput { - """ - The reset token required to reset the customer’s password. - """ - resetToken: String! - """ New password that will be set as part of the reset password process. """ password: String! + + """ + The reset token required to reset the customer’s password. + """ + resetToken: String! } """ @@ -4846,21 +5514,31 @@ type CustomerResetPayload { customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ Specifies the fields required to update the Customer information. """ input CustomerUpdateInput { + """ + Indicates whether the customer has consented to be sent marketing material via email. + """ + acceptsMarketing: Boolean + + """ + The customer’s email. + """ + email: String + """ The customer’s first name. """ @@ -4871,27 +5549,13 @@ input CustomerUpdateInput { """ lastName: String - """ - The customer’s email. - """ - email: String - - """ - A unique phone number for the customer. - - Formatted using E.164 standard. For example, _+16135551111_. To remove the phone number, specify `null`. - """ - phone: String - """ The login password used by the customer. """ password: String - """ - Indicates whether the customer has consented to be sent marketing material via email. - """ - acceptsMarketing: Boolean + "A unique phone number for the customer.\n\nFormatted using E.164 standard. For example, _+16135551111_. To remove the phone number, specify `null`.\n" + phone: String } """ @@ -4903,22 +5567,19 @@ type CustomerUpdatePayload { """ customer: Customer - """ - The newly created customer access token. If the customer's password is updated, all previous access tokens - (including the one used to perform this mutation) become invalid, and a new token is generated. - """ + "The newly created customer access token. If the customer's password is updated, all previous access tokens\n(including the one used to perform this mutation) become invalid, and a new token is generated.\n" customerAccessToken: CustomerAccessToken """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ customerUserErrors: [CustomerUserError!]! """ - List of errors that occurred executing the mutation. + The list of errors that occurred from executing the mutation. """ userErrors: [UserError!]! - @deprecated(reason: "Use `customerUserErrors` instead") + @deprecated(reason: "Use `customerUserErrors` instead.") } """ @@ -4926,12 +5587,12 @@ Represents an error that happens during execution of a customer mutation. """ type CustomerUserError implements DisplayableError { """ - Error code to uniquely identify the error. + The error code. """ code: CustomerErrorCode """ - Path to the input field which caused the error. + The path to the input field that caused the error. """ field: [String!] @@ -4941,30 +5602,61 @@ type CustomerUserError implements DisplayableError { message: String! } -""" -An ISO-8601 encoded UTC date time string. Example value: `"2019-07-03T20:47:55Z"`. -""" +"Represents an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)-encoded date and time string.\nFor example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is\nrepresented as `\"2019-09-07T15:50:00Z`\".\n" scalar DateTime -""" -A signed decimal number, which supports arbitrary precision and is serialized as a string. Example value: `"29.99"`. -""" +"A signed decimal number, which supports arbitrary precision and is serialized as a string.\n\nExample values: `\"29.99\"`, `\"29.999\"`.\n" scalar Decimal +""" +List of different delivery method types. +""" +enum DeliveryMethodType { + """ + Local Delivery. + """ + LOCAL + + """ + None. + """ + NONE + + """ + Shipping to a Pickup Point. + """ + PICKUP_POINT + + """ + Local Pickup. + """ + PICK_UP + + """ + Retail. + """ + RETAIL + + """ + Shipping. + """ + SHIPPING +} + """ Digital wallet, such as Apple Pay, which can be used for accelerated checkouts. """ enum DigitalWallet { - """ - Apple Pay. - """ - APPLE_PAY - """ Android Pay. """ ANDROID_PAY + """ + Apple Pay. + """ + APPLE_PAY + """ Google Pay. """ @@ -4976,9 +5668,7 @@ enum DigitalWallet { SHOPIFY_PAY } -""" -An amount discounting the line that has been allocated by a discount. -""" +"An amount discounting the line that has been allocated by a discount.\n" type DiscountAllocation { """ Amount of discount allocated. @@ -4991,10 +5681,7 @@ type DiscountAllocation { discountApplication: DiscountApplication! } -""" -Discount applications capture the intentions of a discount source at -the time of application. -""" +"Discount applications capture the intentions of a discount source at\nthe time of application.\n" interface DiscountApplication { """ The method by which the discount's value is allocated to its entitled items. @@ -5034,27 +5721,28 @@ enum DiscountApplicationAllocationMethod { """ The value is specifically applied onto a particular line. """ - ONE + ONE @deprecated(reason: "Use ACROSS instead.") } -""" -An auto-generated type for paginating through multiple DiscountApplications. -""" +"An auto-generated type for paginating through multiple DiscountApplications.\n" type DiscountApplicationConnection { """ A list of edges. """ edges: [DiscountApplicationEdge!]! + """ + A list of the nodes contained in DiscountApplicationEdge. + """ + nodes: [DiscountApplication!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one DiscountApplication and a cursor during pagination. -""" +"An auto-generated type which holds one DiscountApplication and a cursor during pagination.\n" type DiscountApplicationEdge { """ A cursor for use in pagination. @@ -5067,10 +5755,7 @@ type DiscountApplicationEdge { node: DiscountApplication! } -""" -Which lines on the order that the discount is allocated over, of the type -defined by the Discount Application's target_type. -""" +"The lines on the order to which the discount is applied, of the type defined by\nthe discount application's `targetType`. For example, the value `ENTITLED`, combined with a `targetType` of\n`LINE_ITEM`, applies the discount on all line items that are entitled to the discount.\nThe value `ALL`, combined with a `targetType` of `SHIPPING_LINE`, applies the discount on all shipping lines.\n" enum DiscountApplicationTargetSelection { """ The discount is allocated onto all the lines. @@ -5078,7 +5763,7 @@ enum DiscountApplicationTargetSelection { ALL """ - The discount is allocated onto only the lines it is entitled for. + The discount is allocated onto only the lines that it's entitled for. """ ENTITLED @@ -5088,9 +5773,7 @@ enum DiscountApplicationTargetSelection { EXPLICIT } -""" -The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards. -""" +"The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards.\n" enum DiscountApplicationTargetType { """ The discount applies onto line items. @@ -5103,10 +5786,7 @@ enum DiscountApplicationTargetType { SHIPPING_LINE } -""" -Discount code applications capture the intentions of a discount code at -the time that it is applied. -""" +"Discount code applications capture the intentions of a discount code at\nthe time that it is applied.\n" type DiscountCodeApplication implements DiscountApplication { """ The method by which the discount's value is allocated to its entitled items. @@ -5144,7 +5824,7 @@ Represents an error in the input of a mutation. """ interface DisplayableError { """ - Path to the input field which caused the error. + The path to the input field that caused the error. """ field: [String!] @@ -5177,19 +5857,29 @@ type Domain { """ Represents a video hosted outside of Shopify. """ -type ExternalVideo implements Node & Media { +type ExternalVideo implements Media & Node { """ A word or phrase to share the nature or contents of a media. """ alt: String """ - The URL. + The embed URL of the video for the respective host. """ - embeddedUrl: URL! + embedUrl: URL! """ - Globally unique identifier. + The URL. + """ + embeddedUrl: URL! @deprecated(reason: "Use `originUrl` instead.") + + """ + The host of the external video. + """ + host: MediaHost! + + """ + A globally-unique identifier. """ id: ID! @@ -5198,12 +5888,83 @@ type ExternalVideo implements Node & Media { """ mediaContentType: MediaContentType! + """ + The origin URL of the video on the respective host. + """ + originUrl: URL! + """ The preview image for the media. """ previewImage: Image } +""" +A filter that is supported on the parent field. +""" +type Filter { + """ + A unique identifier. + """ + id: String! + + """ + A human-friendly string for this filter. + """ + label: String! + + """ + An enumeration that denotes the type of data this filter represents. + """ + type: FilterType! + + """ + The list of values for this filter. + """ + values: [FilterValue!]! +} + +"The type of data that the filter group represents.\n\nFor more information, refer to [Filter products in a collection with the Storefront API]\n(https://shopify.dev/api/examples/filter-products).\n" +enum FilterType { + """ + A boolean value. + """ + BOOLEAN + + """ + A list of selectable values. + """ + LIST + + """ + A range of prices. + """ + PRICE_RANGE +} + +""" +A selectable value within a filter. +""" +type FilterValue { + """ + The number of results that match this filter value. + """ + count: Int! + + """ + A unique identifier. + """ + id: String! + + "An input object that can be used to filter by this value on the parent field.\n\nThe value is provided as a helper for building dynamic filtering UI. For example, if you have a list of selected `FilterValue` objects, you can combine their respective `input` values to use in a subsequent query.\n" + input: JSON! + + """ + A human-friendly string for this filter value. + """ + label: String! +} + """ Represents a single fulfillment in an order. """ @@ -5212,26 +5973,26 @@ type Fulfillment { List of the fulfillment's line items. """ fulfillmentLineItems( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -5243,10 +6004,7 @@ type Fulfillment { """ trackingCompany: String - """ - Tracking information associated with the fulfillment, - such as the tracking number and tracking URL. - """ + "Tracking information associated with the fulfillment,\nsuch as the tracking number and tracking URL.\n" trackingInfo( """ Truncate the array result to this size. @@ -5270,24 +6028,25 @@ type FulfillmentLineItem { quantity: Int! } -""" -An auto-generated type for paginating through multiple FulfillmentLineItems. -""" +"An auto-generated type for paginating through multiple FulfillmentLineItems.\n" type FulfillmentLineItemConnection { """ A list of edges. """ edges: [FulfillmentLineItemEdge!]! + """ + A list of the nodes contained in FulfillmentLineItemEdge. + """ + nodes: [FulfillmentLineItem!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination. -""" +"An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination.\n" type FulfillmentLineItemEdge { """ A cursor for use in pagination. @@ -5316,8 +6075,56 @@ type FulfillmentTrackingInfo { } """ -A string containing HTML code. Example value: `"

Grey cotton knit sweater.

"`. +The generic file resource lets you manage files in a merchant’s store. Generic files include any file that doesn’t fit into a designated type such as image or video. Example: PDF, JSON. """ +type GenericFile implements Node { + """ + A word or phrase to indicate the contents of a file. + """ + alt: String + + """ + A globally-unique identifier. + """ + id: ID! + + """ + The MIME type of the file. + """ + mimeType: String + + """ + The size of the original file in bytes. + """ + originalFileSize: Int + + """ + The preview image for the file. + """ + previewImage: Image + + """ + The URL of the file. + """ + url: URL +} + +""" +Used to specify a geographical location. +""" +input GeoCoordinateInput { + """ + The coordinate's latitude value. + """ + latitude: Float! + + """ + The coordinate's longitude value. + """ + longitude: Float! +} + +"A string containing HTML code. Refer to the [HTML spec](https://html.spec.whatwg.org/#elements-3) for a\ncomplete list of HTML elements.\n\nExample value: `\"

Grey cotton knit sweater.

\"`.\n" scalar HTML """ @@ -5325,54 +6132,42 @@ Represents information about the metafields associated to the specified resource """ interface HasMetafields { """ - The metafield associated with the resource. + Returns a metafield found by namespace and key. """ metafield( """ - Container for a set of metafields (maximum of 20 characters). - """ - namespace: String! - - """ - Identifier for the metafield (maximum of 30 characters). + The identifier for the metafield. """ key: String! + + """ + A container for a set of metafields. + """ + namespace: String! ): Metafield - """ - A paginated list of metafields associated with the resource. - """ + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" metafields( """ - Container for a set of metafields (maximum of 20 characters). + The list of metafields to retrieve by namespace and key. """ - namespace: String + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! +} - """ - Returns up to the first `n` elements from the list. - """ - first: Int +""" +Identifies a metafield on an owner resource by namespace and key. +""" +input HasMetafieldsIdentifier { + """ + The identifier for the metafield. + """ + key: String! - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): MetafieldConnection! + """ + A container for a set of metafields. + """ + namespace: String! } """ @@ -5394,32 +6189,20 @@ type Image { """ id: ID - """ - The location of the original image as a URL. - - If there are any existing transformations in the original source URL, they will remain and not be stripped. - """ - originalSrc: URL! + "The location of the original image as a URL.\n\nIf there are any existing transformations in the original source URL, they will remain and not be stripped.\n" + originalSrc: URL! @deprecated(reason: "Use `url` instead.") """ The location of the image as a URL. """ - src: URL! - @deprecated( - reason: "Previously an image had a single `src` field. This could either return the original image\nlocation or a URL that contained transformations such as sizing or scale.\n\nThese transformations were specified by arguments on the parent field.\n\nNow an image has two distinct URL fields: `originalSrc` and `transformedSrc`.\n\n* `originalSrc` - the original unmodified image URL\n* `transformedSrc` - the image URL with the specified transformations included\n\nTo migrate to the new fields, image transformations should be moved from the parent field to `transformedSrc`.\n\nBefore:\n```graphql\n{\n shop {\n productImages(maxWidth: 200, scale: 2) {\n edges {\n node {\n src\n }\n }\n }\n }\n}\n```\n\nAfter:\n```graphql\n{\n shop {\n productImages {\n edges {\n node {\n transformedSrc(maxWidth: 200, scale: 2)\n }\n }\n }\n }\n}\n```\n" - ) + src: URL! @deprecated(reason: "Use `url` instead.") - """ - The location of the transformed image as a URL. - - All transformation arguments are considered "best-effort". If they can be applied to an image, they will be. - Otherwise any transformations which an image type does not support will be ignored. - """ + "The location of the transformed image as a URL.\n\nAll transformation arguments are considered \"best-effort\". If they can be applied to an image, they will be.\nOtherwise any transformations which an image type does not support will be ignored.\n" transformedSrc( """ - Image width in pixels between 1 and 5760. + Crops the image according to the specified region. """ - maxWidth: Int + crop: CropRegion """ Image height in pixels between 1 and 5760. @@ -5427,19 +6210,27 @@ type Image { maxHeight: Int """ - Crops the image according to the specified region. + Image width in pixels between 1 and 5760. """ - crop: CropRegion + maxWidth: Int + + """ + Best effort conversion of image into content type (SVG -> PNG, Anything -> JPG, Anything -> WEBP are supported). + """ + preferredContentType: ImageContentType """ Image size multiplier for high-resolution retina displays. Must be between 1 and 3. """ scale: Int = 1 + ): URL! @deprecated(reason: "Use `url(transform:)` instead") + "The location of the image as a URL.\n\nIf no transform options are specified, then the original image will be preserved including any pre-applied transforms.\n\nAll transformation options are considered \"best-effort\". Any transformation that the original image type doesn't support will be ignored.\n\nIf you need multiple variations of the same image, then you can use [GraphQL aliases](https://graphql.org/learn/queries/#aliases).\n" + url( """ - Best effort conversion of image into content type (SVG -> PNG, Anything -> JGP, Anything -> WEBP are supported). + A set of options to transform the original image. """ - preferredContentType: ImageContentType + transform: ImageTransformInput ): URL! """ @@ -5448,15 +6239,18 @@ type Image { width: Int } -""" -An auto-generated type for paginating through multiple Images. -""" +"An auto-generated type for paginating through multiple Images.\n" type ImageConnection { """ A list of edges. """ edges: [ImageEdge!]! + """ + A list of the nodes contained in ImageEdge. + """ + nodes: [Image!]! + """ Information to aid in pagination. """ @@ -5467,25 +6261,23 @@ type ImageConnection { List of supported image content types. """ enum ImageContentType { - """ - A PNG image. - """ - PNG - """ A JPG image. """ JPG + """ + A PNG image. + """ + PNG + """ A WEBP image. """ WEBP } -""" -An auto-generated type which holds one Image and a cursor during pagination. -""" +"An auto-generated type which holds one Image and a cursor during pagination.\n" type ImageEdge { """ A cursor for use in pagination. @@ -5498,6 +6290,899 @@ type ImageEdge { node: Image! } +"The available options for transforming an image.\n\nAll transformation options are considered best effort. Any transformation that the original image type doesn't support will be ignored.\n" +input ImageTransformInput { + "The region of the image to remain after cropping.\nMust be used in conjunction with the `maxWidth` and/or `maxHeight` fields, where the `maxWidth` and `maxHeight` aren't equal.\nThe `crop` argument should coincide with the smaller value. A smaller `maxWidth` indicates a `LEFT` or `RIGHT` crop, while\na smaller `maxHeight` indicates a `TOP` or `BOTTOM` crop. For example, `{ maxWidth: 5, maxHeight: 10, crop: LEFT }` will result\nin an image with a width of 5 and height of 10, where the right side of the image is removed.\n" + crop: CropRegion + + "Image height in pixels between 1 and 5760.\n" + maxHeight: Int + + "Image width in pixels between 1 and 5760.\n" + maxWidth: Int + + "Convert the source image into the preferred content type.\nSupported conversions: `.svg` to `.png`, any file type to `.jpg`, and any file type to `.webp`.\n" + preferredContentType: ImageContentType + + "Image size multiplier for high-resolution retina displays. Must be within 1..3.\n" + scale: Int = 1 +} + +"A [JSON](https://www.json.org/json-en.html) object.\n\nExample value:\n`{\n \"product\": {\n \"id\": \"gid://shopify/Product/1346443542550\",\n \"title\": \"White T-shirt\",\n \"options\": [{\n \"name\": \"Size\",\n \"values\": [\"M\", \"L\"]\n }]\n }\n}`\n" +scalar JSON + +""" +A language. +""" +type Language { + """ + The name of the language in the language itself. If the language uses capitalization, it is capitalized for a mid-sentence position. + """ + endonymName: String! + + """ + The ISO code. + """ + isoCode: LanguageCode! + + """ + The name of the language in the current language. + """ + name: String! +} + +""" +ISO 639-1 language codes supported by Shopify. +""" +enum LanguageCode { + """ + Afrikaans. + """ + AF + + """ + Akan. + """ + AK + + """ + Amharic. + """ + AM + + """ + Arabic. + """ + AR + + """ + Assamese. + """ + AS + + """ + Azerbaijani. + """ + AZ + + """ + Belarusian. + """ + BE + + """ + Bulgarian. + """ + BG + + """ + Bambara. + """ + BM + + """ + Bangla. + """ + BN + + """ + Tibetan. + """ + BO + + """ + Breton. + """ + BR + + """ + Bosnian. + """ + BS + + """ + Catalan. + """ + CA + + """ + Chechen. + """ + CE + + """ + Czech. + """ + CS + + """ + Church Slavic. + """ + CU + + """ + Welsh. + """ + CY + + """ + Danish. + """ + DA + + """ + German. + """ + DE + + """ + Dzongkha. + """ + DZ + + """ + Ewe. + """ + EE + + """ + Greek. + """ + EL + + """ + English. + """ + EN + + """ + Esperanto. + """ + EO + + """ + Spanish. + """ + ES + + """ + Estonian. + """ + ET + + """ + Basque. + """ + EU + + """ + Persian. + """ + FA + + """ + Fulah. + """ + FF + + """ + Finnish. + """ + FI + + """ + Faroese. + """ + FO + + """ + French. + """ + FR + + """ + Western Frisian. + """ + FY + + """ + Irish. + """ + GA + + """ + Scottish Gaelic. + """ + GD + + """ + Galician. + """ + GL + + """ + Gujarati. + """ + GU + + """ + Manx. + """ + GV + + """ + Hausa. + """ + HA + + """ + Hebrew. + """ + HE + + """ + Hindi. + """ + HI + + """ + Croatian. + """ + HR + + """ + Hungarian. + """ + HU + + """ + Armenian. + """ + HY + + """ + Interlingua. + """ + IA + + """ + Indonesian. + """ + ID + + """ + Igbo. + """ + IG + + """ + Sichuan Yi. + """ + II + + """ + Icelandic. + """ + IS + + """ + Italian. + """ + IT + + """ + Japanese. + """ + JA + + """ + Javanese. + """ + JV + + """ + Georgian. + """ + KA + + """ + Kikuyu. + """ + KI + + """ + Kazakh. + """ + KK + + """ + Kalaallisut. + """ + KL + + """ + Khmer. + """ + KM + + """ + Kannada. + """ + KN + + """ + Korean. + """ + KO + + """ + Kashmiri. + """ + KS + + """ + Kurdish. + """ + KU + + """ + Cornish. + """ + KW + + """ + Kyrgyz. + """ + KY + + """ + Luxembourgish. + """ + LB + + """ + Ganda. + """ + LG + + """ + Lingala. + """ + LN + + """ + Lao. + """ + LO + + """ + Lithuanian. + """ + LT + + """ + Luba-Katanga. + """ + LU + + """ + Latvian. + """ + LV + + """ + Malagasy. + """ + MG + + """ + Māori. + """ + MI + + """ + Macedonian. + """ + MK + + """ + Malayalam. + """ + ML + + """ + Mongolian. + """ + MN + + """ + Marathi. + """ + MR + + """ + Malay. + """ + MS + + """ + Maltese. + """ + MT + + """ + Burmese. + """ + MY + + """ + Norwegian (Bokmål). + """ + NB + + """ + North Ndebele. + """ + ND + + """ + Nepali. + """ + NE + + """ + Dutch. + """ + NL + + """ + Norwegian Nynorsk. + """ + NN + + """ + Norwegian. + """ + NO + + """ + Oromo. + """ + OM + + """ + Odia. + """ + OR + + """ + Ossetic. + """ + OS + + """ + Punjabi. + """ + PA + + """ + Polish. + """ + PL + + """ + Pashto. + """ + PS + + """ + Portuguese. + """ + PT + + """ + Portuguese (Brazil). + """ + PT_BR + + """ + Portuguese (Portugal). + """ + PT_PT + + """ + Quechua. + """ + QU + + """ + Romansh. + """ + RM + + """ + Rundi. + """ + RN + + """ + Romanian. + """ + RO + + """ + Russian. + """ + RU + + """ + Kinyarwanda. + """ + RW + + """ + Sindhi. + """ + SD + + """ + Northern Sami. + """ + SE + + """ + Sango. + """ + SG + + """ + Sinhala. + """ + SI + + """ + Slovak. + """ + SK + + """ + Slovenian. + """ + SL + + """ + Shona. + """ + SN + + """ + Somali. + """ + SO + + """ + Albanian. + """ + SQ + + """ + Serbian. + """ + SR + + """ + Sundanese. + """ + SU + + """ + Swedish. + """ + SV + + """ + Swahili. + """ + SW + + """ + Tamil. + """ + TA + + """ + Telugu. + """ + TE + + """ + Tajik. + """ + TG + + """ + Thai. + """ + TH + + """ + Tigrinya. + """ + TI + + """ + Turkmen. + """ + TK + + """ + Tongan. + """ + TO + + """ + Turkish. + """ + TR + + """ + Tatar. + """ + TT + + """ + Uyghur. + """ + UG + + """ + Ukrainian. + """ + UK + + """ + Urdu. + """ + UR + + """ + Uzbek. + """ + UZ + + """ + Vietnamese. + """ + VI + + """ + Volapük. + """ + VO + + """ + Wolof. + """ + WO + + """ + Xhosa. + """ + XH + + """ + Yiddish. + """ + YI + + """ + Yoruba. + """ + YO + + """ + Chinese. + """ + ZH + + """ + Chinese (Simplified). + """ + ZH_CN + + """ + Chinese (Traditional). + """ + ZH_TW + + """ + Zulu. + """ + ZU +} + +""" +Information about the localized experiences configured for the shop. +""" +type Localization { + """ + The list of countries with enabled localized experiences. + """ + availableCountries: [Country!]! + + """ + The list of languages available for the active country. + """ + availableLanguages: [Language!]! + + """ + The country of the active localized experience. Use the `@inContext` directive to change this value. + """ + country: Country! + + """ + The language of the active localized experience. Use the `@inContext` directive to change this value. + """ + language: Language! +} + +""" +Represents a location where product inventory is held. +""" +type Location implements Node { + """ + The address of the location. + """ + address: LocationAddress! + + """ + A globally-unique identifier. + """ + id: ID! + + """ + The name of the location. + """ + name: String! +} + +"Represents the address of a location.\n" +type LocationAddress { + """ + The first line of the address for the location. + """ + address1: String + + """ + The second line of the address for the location. + """ + address2: String + + """ + The city of the location. + """ + city: String + + """ + The country of the location. + """ + country: String + + """ + The country code of the location. + """ + countryCode: String + + """ + A formatted version of the address for the location. + """ + formatted: [String!]! + + """ + The latitude coordinates of the location. + """ + latitude: Float + + """ + The longitude coordinates of the location. + """ + longitude: Float + + """ + The phone number of the location. + """ + phone: String + + """ + The province of the location. + """ + province: String + + "The code for the province, state, or district of the address of the location.\n" + provinceCode: String + + """ + The ZIP code of the location. + """ + zip: String +} + +"An auto-generated type for paginating through multiple Locations.\n" +type LocationConnection { + """ + A list of edges. + """ + edges: [LocationEdge!]! + + """ + A list of the nodes contained in LocationEdge. + """ + nodes: [Location!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one Location and a cursor during pagination.\n" +type LocationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of LocationEdge. + """ + node: Location! +} + +""" +The set of valid sort keys for the Location query. +""" +enum LocationSortKeys { + """ + Sort by the `city` value. + """ + CITY + + """ + Sort by the `distance` value. + """ + DISTANCE + + """ + Sort by the `id` value. + """ + ID + + """ + Sort by the `name` value. + """ + NAME +} + """ Represents a mailing address for customers and shipping. """ @@ -5507,38 +7192,22 @@ type MailingAddress implements Node { """ address1: String - """ - The second line of the address. Typically the number of the apartment, suite, or unit. - """ + "The second line of the address. Typically the number of the apartment, suite, or unit.\n" address2: String - """ - The name of the city, district, village, or town. - """ + "The name of the city, district, village, or town.\n" city: String - """ - The name of the customer's company or organization. - """ + "The name of the customer's company or organization.\n" company: String - """ - The name of the country. - """ + "The name of the country.\n" country: String - """ - The two-letter code for the country of the address. + "The two-letter code for the country of the address.\n\nFor example, US.\n" + countryCode: String @deprecated(reason: "Use `countryCodeV2` instead.") - For example, US. - """ - countryCode: String @deprecated(reason: "Use `countryCodeV2` instead") - - """ - The two-letter code for the country of the address. - - For example, US. - """ + "The two-letter code for the country of the address.\n\nFor example, US.\n" countryCodeV2: CountryCode """ @@ -5550,15 +7219,15 @@ type MailingAddress implements Node { A formatted version of the address, customized by the provided arguments. """ formatted( - """ - Whether to include the customer's name in the formatted address. - """ - withName: Boolean = false - """ Whether to include the customer's company in the formatted address. """ withCompany: Boolean = true + + """ + Whether to include the customer's name in the formatted address. + """ + withName: Boolean = false ): [String!]! """ @@ -5567,7 +7236,7 @@ type MailingAddress implements Node { formattedArea: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -5586,16 +7255,10 @@ type MailingAddress implements Node { """ longitude: Float - """ - The full name of the customer, based on firstName and lastName. - """ + "The full name of the customer, based on firstName and lastName.\n" name: String - """ - A unique phone number for the customer. - - Formatted using E.164 standard. For example, _+16135551111_. - """ + "A unique phone number for the customer.\n\nFormatted using E.164 standard. For example, _+16135551111_.\n" phone: String """ @@ -5603,11 +7266,7 @@ type MailingAddress implements Node { """ province: String - """ - The two-letter code for the region. - - For example, ON. - """ + "The two-letter code for the region.\n\nFor example, ON.\n" provinceCode: String """ @@ -5616,24 +7275,25 @@ type MailingAddress implements Node { zip: String } -""" -An auto-generated type for paginating through multiple MailingAddresses. -""" +"An auto-generated type for paginating through multiple MailingAddresses.\n" type MailingAddressConnection { """ A list of edges. """ edges: [MailingAddressEdge!]! + """ + A list of the nodes contained in MailingAddressEdge. + """ + nodes: [MailingAddress!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one MailingAddress and a cursor during pagination. -""" +"An auto-generated type which holds one MailingAddress and a cursor during pagination.\n" type MailingAddressEdge { """ A cursor for use in pagination. @@ -5650,24 +7310,16 @@ type MailingAddressEdge { Specifies the fields accepted to create or update a mailing address. """ input MailingAddressInput { - """ - The first line of the address. Typically the street address or PO Box number. - """ + "The first line of the address. Typically the street address or PO Box number.\n" address1: String - """ - The second line of the address. Typically the number of the apartment, suite, or unit. - """ + "The second line of the address. Typically the number of the apartment, suite, or unit.\n" address2: String - """ - The name of the city, district, village, or town. - """ + "The name of the city, district, village, or town.\n" city: String - """ - The name of the customer's company or organization. - """ + "The name of the customer's company or organization.\n" company: String """ @@ -5685,11 +7337,7 @@ input MailingAddressInput { """ lastName: String - """ - A unique phone number for the customer. - - Formatted using E.164 standard. For example, _+16135551111_. - """ + "A unique phone number for the customer.\n\nFormatted using E.164 standard. For example, _+16135551111_.\n" phone: String """ @@ -5703,9 +7351,7 @@ input MailingAddressInput { zip: String } -""" -Manual discount applications capture the intentions of a discount that was manually created. -""" +"Manual discount applications capture the intentions of a discount that was manually created.\n" type ManualDiscountApplication implements DiscountApplication { """ The method by which the discount's value is allocated to its entitled items. @@ -5758,15 +7404,18 @@ interface Media { previewImage: Image } -""" -An auto-generated type for paginating through multiple Media. -""" +"An auto-generated type for paginating through multiple Media.\n" type MediaConnection { """ A list of edges. """ edges: [MediaEdge!]! + """ + A list of the nodes contained in MediaEdge. + """ + nodes: [Media!]! + """ Information to aid in pagination. """ @@ -5798,9 +7447,7 @@ enum MediaContentType { VIDEO } -""" -An auto-generated type which holds one Media and a cursor during pagination. -""" +"An auto-generated type which holds one Media and a cursor during pagination.\n" type MediaEdge { """ A cursor for use in pagination. @@ -5813,17 +7460,32 @@ type MediaEdge { node: Media! } +""" +Host for a Media Resource. +""" +enum MediaHost { + """ + Host for Vimeo embedded videos. + """ + VIMEO + + """ + Host for YouTube embedded videos. + """ + YOUTUBE +} + """ Represents a Shopify hosted image. """ -type MediaImage implements Node & Media { +type MediaImage implements Media & Node { """ A word or phrase to share the nature or contents of a media. """ alt: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -5843,10 +7505,138 @@ type MediaImage implements Node & Media { previewImage: Image } +"A menu used for navigation within a storefront.\n" +type Menu implements Node { + """ + The menu's handle. + """ + handle: String! + + """ + A globally-unique identifier. + """ + id: ID! + + """ + The menu's child items. + """ + items: [MenuItem!]! + + """ + The count of items on the menu. + """ + itemsCount: Int! + + """ + The menu's title. + """ + title: String! +} + +"A menu item within a parent menu.\n" +type MenuItem implements Node { + """ + A globally-unique identifier. + """ + id: ID! + + """ + The menu item's child items. + """ + items: [MenuItem!]! + + """ + The ID of the linked resource. + """ + resourceId: ID + + """ + The menu item's tags to filter a collection. + """ + tags: [String!]! + + """ + The menu item's title. + """ + title: String! + + """ + The menu item's type. + """ + type: MenuItemType! + + """ + The menu item's URL. + """ + url: URL +} + """ -Metafields represent custom metadata attached to a resource. Metafields can be sorted into namespaces and are -comprised of keys, values, and value types. +A menu item type. """ +enum MenuItemType { + """ + An article link. + """ + ARTICLE + + """ + A blog link. + """ + BLOG + + """ + A catalog link. + """ + CATALOG + + """ + A collection link. + """ + COLLECTION + + """ + A collection link. + """ + COLLECTIONS + + """ + A frontpage link. + """ + FRONTPAGE + + """ + An http link. + """ + HTTP + + """ + A page link. + """ + PAGE + + """ + A product link. + """ + PRODUCT + + """ + A search link. + """ + SEARCH + + """ + A shop policy link. + """ + SHOP_POLICY +} + +""" +The merchandise to be purchased at checkout. +""" +union Merchandise = ProductVariant + +"Metafields represent custom metadata attached to a resource. Metafields can be sorted into namespaces and are\ncomprised of keys, values, and value types.\n" type Metafield implements Node { """ The date and time when the storefront metafield was created. @@ -5859,7 +7649,7 @@ type Metafield implements Node { description: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -5878,6 +7668,14 @@ type Metafield implements Node { """ parentResource: MetafieldParentResource! + """ + Returns a reference object if the metafield definition's type is a resource reference. + """ + reference: MetafieldReference + + "The type name of the metafield.\nSee the list of [supported types](https://shopify.dev/apps/metafields/definitions/types).\n" + type: String! + """ The date and time when the storefront metafield was updated. """ @@ -5887,79 +7685,60 @@ type Metafield implements Node { The value of a metafield. """ value: String! - - """ - Represents the metafield value type. - """ - valueType: MetafieldValueType! } -""" -An auto-generated type for paginating through multiple Metafields. -""" -type MetafieldConnection { +"A filter used to view a subset of products in a collection matching a specific metafield value.\n\nOnly the following metafield types are currently supported:\n- `number_integer`\n- `number_decimal`\n- `single_line_text_field`\n- `boolean` as of 2022-04.\n" +input MetafieldFilter { """ - A list of edges. + The key of the metafield to filter on. """ - edges: [MetafieldEdge!]! + key: String! """ - Information to aid in pagination. + The namespace of the metafield to filter on. """ - pageInfo: PageInfo! -} - -""" -An auto-generated type which holds one Metafield and a cursor during pagination. -""" -type MetafieldEdge { - """ - A cursor for use in pagination. - """ - cursor: String! + namespace: String! """ - The item at the end of MetafieldEdge. + The value of the metafield. """ - node: Metafield! + value: String! } """ A resource that the metafield belongs to. """ -union MetafieldParentResource = Product | ProductVariant +union MetafieldParentResource = + Article + | Blog + | Collection + | Customer + | Order + | Page + | Product + | ProductVariant + | Shop -""" -Metafield value types. -""" -enum MetafieldValueType { - """ - A string metafield. - """ - STRING - - """ - An integer metafield. - """ - INTEGER - - """ - A json string metafield. - """ - JSON_STRING -} +"Returns the resource which is being referred to by a metafield.\n" +union MetafieldReference = + GenericFile + | MediaImage + | Page + | Product + | ProductVariant + | Video """ Represents a Shopify hosted 3D model. """ -type Model3d implements Node & Media { +type Model3d implements Media & Node { """ A word or phrase to share the nature or contents of a media. """ alt: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -6005,7 +7784,7 @@ type Model3dSource { } """ -A monetary value string. Example value: `"100.57"`. +A monetary value string without a currency symbol or code. Example value: `"100.57"`. """ scalar Money @@ -6024,29 +7803,7 @@ input MoneyInput { currencyCode: CurrencyCode! } -""" -A monetary value with currency. - -To format currencies, combine this type's amount and currencyCode fields with your client's locale. - -For example, in JavaScript you could use Intl.NumberFormat: - -```js -new Intl.NumberFormat(locale, { - style: 'currency', - currency: currencyCode -}).format(amount); -``` - -Other formatting libraries include: - -* iOS - [NumberFormatter](https://developer.apple.com/documentation/foundation/numberformatter) -* Android - [NumberFormat](https://developer.android.com/reference/java/text/NumberFormat.html) -* PHP - [NumberFormatter](http://php.net/manual/en/class.numberformatter.php) - -For a more general solution, the [Unicode CLDR number formatting database] is available with many implementations -(such as [TwitterCldr](https://github.com/twitter/twitter-cldr-rb)). -""" +"A monetary value with currency.\n" type MoneyV2 { """ Decimal money amount. @@ -6059,58 +7816,123 @@ type MoneyV2 { currencyCode: CurrencyCode! } -""" -An auto-generated type for paginating through multiple MoneyV2s. -""" -type MoneyV2Connection { - """ - A list of edges. - """ - edges: [MoneyV2Edge!]! - - """ - Information to aid in pagination. - """ - pageInfo: PageInfo! -} - -""" -An auto-generated type which holds one MoneyV2 and a cursor during pagination. -""" -type MoneyV2Edge { - """ - A cursor for use in pagination. - """ - cursor: String! - - """ - The item at the end of MoneyV2Edge. - """ - node: MoneyV2! -} - """ The schema’s entry-point for mutations. This acts as the public, top-level API from which all mutation queries must start. """ type Mutation { """ - Updates the attributes of a checkout. + Updates the attributes on a cart. """ - checkoutAttributesUpdate( + cartAttributesUpdate( """ - The ID of the checkout. + An array of key-value pairs that contains additional information about the cart. """ - checkoutId: ID! + attributes: [AttributeInput!]! """ - The fields used to update a checkout's attributes. + The ID of the cart. """ - input: CheckoutAttributesUpdateInput! - ): CheckoutAttributesUpdatePayload - @deprecated(reason: "Use `checkoutAttributesUpdateV2` instead") + cartId: ID! + ): CartAttributesUpdatePayload + + "Updates customer information associated with a cart.\nBuyer identity is used to determine\n[international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout)\nand should match the customer's shipping address.\n" + cartBuyerIdentityUpdate( + """ + The customer associated with the cart. Used to determine [international pricing](https://shopify.dev/api/examples/international-pricing#create-a-checkout). Buyer identity should match the customer's shipping address. + """ + buyerIdentity: CartBuyerIdentityInput! + + """ + The ID of the cart. + """ + cartId: ID! + ): CartBuyerIdentityUpdatePayload """ - Updates the attributes of a checkout. + Creates a new cart. + """ + cartCreate( + """ + The fields used to create a cart. + """ + input: CartInput + ): CartCreatePayload + + """ + Updates the discount codes applied to the cart. + """ + cartDiscountCodesUpdate( + """ + The ID of the cart. + """ + cartId: ID! + + "The case-insensitive discount codes that the customer added at checkout.\n" + discountCodes: [String!] + ): CartDiscountCodesUpdatePayload + + """ + Adds a merchandise line to the cart. + """ + cartLinesAdd( + """ + The ID of the cart. + """ + cartId: ID! + + """ + A list of merchandise lines to add to the cart. + """ + lines: [CartLineInput!]! + ): CartLinesAddPayload + + """ + Removes one or more merchandise lines from the cart. + """ + cartLinesRemove( + """ + The ID of the cart. + """ + cartId: ID! + + """ + The merchandise line IDs to remove. + """ + lineIds: [ID!]! + ): CartLinesRemovePayload + + """ + Updates one or more merchandise lines on a cart. + """ + cartLinesUpdate( + """ + The ID of the cart. + """ + cartId: ID! + + """ + The merchandise lines to update. + """ + lines: [CartLineUpdateInput!]! + ): CartLinesUpdatePayload + + """ + Updates the note on the cart. + """ + cartNoteUpdate( + """ + The ID of the cart. + """ + cartId: ID! + + """ + The note on the cart. + """ + note: String + ): CartNoteUpdatePayload + + """ + Updates the attributes of a checkout if `allowPartialAddresses` is `true`. """ checkoutAttributesUpdateV2( """ @@ -6135,23 +7957,7 @@ type Mutation { ): CheckoutCompleteFreePayload """ - Completes a checkout using a credit card token from Shopify's Vault. - """ - checkoutCompleteWithCreditCard( - """ - The ID of the checkout. - """ - checkoutId: ID! - - """ - The credit card info to apply as a payment. - """ - payment: CreditCardPaymentInput! - ): CheckoutCompleteWithCreditCardPayload - @deprecated(reason: "Use `checkoutCompleteWithCreditCardV2` instead") - - """ - Completes a checkout using a credit card token from Shopify's card vault. Before you can complete checkouts using CheckoutCompleteWithCreditCardV2, you need to [_request payment processing_](https://help.shopify.com/api/guides/sales-channel-sdk/getting-started#request-payment-processing). + Completes a checkout using a credit card token from Shopify's card vault. Before you can complete checkouts using CheckoutCompleteWithCreditCardV2, you need to [_request payment processing_](https://shopify.dev/apps/channels/getting-started#request-payment-processing). """ checkoutCompleteWithCreditCardV2( """ @@ -6165,38 +7971,6 @@ type Mutation { payment: CreditCardPaymentInputV2! ): CheckoutCompleteWithCreditCardV2Payload - """ - Completes a checkout with a tokenized payment. - """ - checkoutCompleteWithTokenizedPayment( - """ - The ID of the checkout. - """ - checkoutId: ID! - - """ - The info to apply as a tokenized payment. - """ - payment: TokenizedPaymentInput! - ): CheckoutCompleteWithTokenizedPaymentPayload - @deprecated(reason: "Use `checkoutCompleteWithTokenizedPaymentV2` instead") - - """ - Completes a checkout with a tokenized payment. - """ - checkoutCompleteWithTokenizedPaymentV2( - """ - The ID of the checkout. - """ - checkoutId: ID! - - """ - The info to apply as a tokenized payment. - """ - payment: TokenizedPaymentInputV2! - ): CheckoutCompleteWithTokenizedPaymentV2Payload - @deprecated(reason: "Use `checkoutCompleteWithTokenizedPaymentV3` instead") - """ Completes a checkout with a tokenized payment. """ @@ -6220,24 +7994,13 @@ type Mutation { The fields used to create a checkout. """ input: CheckoutCreateInput! + + """ + The checkout queue token. Available only to selected stores. + """ + queueToken: String ): CheckoutCreatePayload - """ - Associates a customer to the checkout. - """ - checkoutCustomerAssociate( - """ - The ID of the checkout. - """ - checkoutId: ID! - - """ - The customer access token of the customer to associate. - """ - customerAccessToken: String! - ): CheckoutCustomerAssociatePayload - @deprecated(reason: "Use `checkoutCustomerAssociateV2` instead") - """ Associates a customer to the checkout. """ @@ -6253,17 +8016,6 @@ type Mutation { customerAccessToken: String! ): CheckoutCustomerAssociateV2Payload - """ - Disassociates the current checkout customer from the checkout. - """ - checkoutCustomerDisassociate( - """ - The ID of the checkout. - """ - checkoutId: ID! - ): CheckoutCustomerDisassociatePayload - @deprecated(reason: "Use `checkoutCustomerDisassociateV2` instead") - """ Disassociates the current checkout customer from the checkout. """ @@ -6274,39 +8026,23 @@ type Mutation { checkoutId: ID! ): CheckoutCustomerDisassociateV2Payload - """ - Applies a discount to an existing checkout using a discount code. - """ - checkoutDiscountCodeApply( - """ - The discount code to apply to the checkout. - """ - discountCode: String! - - """ - The ID of the checkout. - """ - checkoutId: ID! - ): CheckoutDiscountCodeApplyPayload - @deprecated(reason: "Use `checkoutDiscountCodeApplyV2` instead") - """ Applies a discount to an existing checkout using a discount code. """ checkoutDiscountCodeApplyV2( - """ - The discount code to apply to the checkout. - """ - discountCode: String! - """ The ID of the checkout. """ checkoutId: ID! + + """ + The discount code to apply to the checkout. + """ + discountCode: String! ): CheckoutDiscountCodeApplyV2Payload """ - Removes the applied discount from an existing checkout. + Removes the applied discounts from an existing checkout. """ checkoutDiscountCodeRemove( """ @@ -6315,22 +8051,6 @@ type Mutation { checkoutId: ID! ): CheckoutDiscountCodeRemovePayload - """ - Updates the email on an existing checkout. - """ - checkoutEmailUpdate( - """ - The ID of the checkout. - """ - checkoutId: ID! - - """ - The email to update the checkout with. - """ - email: String! - ): CheckoutEmailUpdatePayload - @deprecated(reason: "Use `checkoutEmailUpdateV2` instead") - """ Updates the email on an existing checkout. """ @@ -6346,38 +8066,6 @@ type Mutation { email: String! ): CheckoutEmailUpdateV2Payload - """ - Applies a gift card to an existing checkout using a gift card code. This will replace all currently applied gift cards. - """ - checkoutGiftCardApply( - """ - The code of the gift card to apply on the checkout. - """ - giftCardCode: String! - - """ - The ID of the checkout. - """ - checkoutId: ID! - ): CheckoutGiftCardApplyPayload - @deprecated(reason: "Use `checkoutGiftCardsAppend` instead") - - """ - Removes an applied gift card from the checkout. - """ - checkoutGiftCardRemove( - """ - The ID of the Applied Gift Card to remove from the Checkout. - """ - appliedGiftCardId: ID! - - """ - The ID of the checkout. - """ - checkoutId: ID! - ): CheckoutGiftCardRemovePayload - @deprecated(reason: "Use `checkoutGiftCardRemoveV2` instead") - """ Removes an applied gift card from the checkout. """ @@ -6397,30 +8085,30 @@ type Mutation { Appends gift cards to an existing checkout. """ checkoutGiftCardsAppend( - """ - A list of gift card codes to append to the checkout. - """ - giftCardCodes: [String!]! - """ The ID of the checkout. """ checkoutId: ID! + + """ + A list of gift card codes to append to the checkout. + """ + giftCardCodes: [String!]! ): CheckoutGiftCardsAppendPayload """ Adds a list of line items to a checkout. """ checkoutLineItemsAdd( - """ - A list of line item objects to add to the checkout. - """ - lineItems: [CheckoutLineItemInput!]! - """ The ID of the checkout. """ checkoutId: ID! + + """ + A list of line item objects to add to the checkout. + """ + lineItems: [CheckoutLineItemInput!]! ): CheckoutLineItemsAddPayload """ @@ -6442,15 +8130,15 @@ type Mutation { Sets a list of line items to a checkout. """ checkoutLineItemsReplace( - """ - A list of line item objects to set on the checkout. - """ - lineItems: [CheckoutLineItemInput!]! - """ The ID of the checkout. """ checkoutId: ID! + + """ + A list of line item objects to set on the checkout. + """ + lineItems: [CheckoutLineItemInput!]! ): CheckoutLineItemsReplacePayload """ @@ -6468,35 +8156,19 @@ type Mutation { lineItems: [CheckoutLineItemUpdateInput!]! ): CheckoutLineItemsUpdatePayload - """ - Updates the shipping address of an existing checkout. - """ - checkoutShippingAddressUpdate( - """ - The shipping address to where the line items will be shipped. - """ - shippingAddress: MailingAddressInput! - - """ - The ID of the checkout. - """ - checkoutId: ID! - ): CheckoutShippingAddressUpdatePayload - @deprecated(reason: "Use `checkoutShippingAddressUpdateV2` instead") - """ Updates the shipping address of an existing checkout. """ checkoutShippingAddressUpdateV2( - """ - The shipping address to where the line items will be shipped. - """ - shippingAddress: MailingAddressInput! - """ The ID of the checkout. """ checkoutId: ID! + + """ + The shipping address to where the line items will be shipped. + """ + shippingAddress: MailingAddressInput! ): CheckoutShippingAddressUpdateV2Payload """ @@ -6514,10 +8186,7 @@ type Mutation { shippingRateHandle: String! ): CheckoutShippingLineUpdatePayload - """ - Creates a customer access token. - The customer access token is required to modify the customer object in any way. - """ + "Creates a customer access token.\nThe customer access token is required to modify the customer object in any way.\n" customerAccessTokenCreate( """ The fields used to create a customer access token. @@ -6525,14 +8194,10 @@ type Mutation { input: CustomerAccessTokenCreateInput! ): CustomerAccessTokenCreatePayload - """ - Creates a customer access token using a multipass token instead of email and password. - A customer record is created if customer does not exist. If a customer record already - exists but the record is disabled, then it's enabled. - """ + "Creates a customer access token using a\n[multipass token](https://shopify.dev/api/multipass) instead of email and\npassword. A customer record is created if the customer doesn't exist. If a customer\nrecord already exists but the record is disabled, then the customer record is enabled.\n" customerAccessTokenCreateWithMultipass( """ - A valid multipass token to be authenticated. + A valid [multipass token](https://shopify.dev/api/multipass) to be authenticated. """ multipassToken: String! ): CustomerAccessTokenCreateWithMultipassPayload @@ -6547,12 +8212,7 @@ type Mutation { customerAccessToken: String! ): CustomerAccessTokenDeletePayload - """ - Renews a customer access token. - - Access token renewal must happen *before* a token expires. - If a token has already expired, a new one should be created instead via `customerAccessTokenCreate`. - """ + "Renews a customer access token.\n\nAccess token renewal must happen *before* a token expires.\nIf a token has already expired, a new one should be created instead via `customerAccessTokenCreate`.\n" customerAccessTokenRenew( """ The access token used to identify the customer. @@ -6594,36 +8254,41 @@ type Mutation { Creates a new address for a customer. """ customerAddressCreate( - """ - The access token used to identify the customer. - """ - customerAccessToken: String! - """ The customer mailing address to create. """ address: MailingAddressInput! + + """ + The access token used to identify the customer. + """ + customerAccessToken: String! ): CustomerAddressCreatePayload """ Permanently deletes the address of an existing customer. """ customerAddressDelete( - """ - Specifies the address to delete. - """ - id: ID! - """ The access token used to identify the customer. """ customerAccessToken: String! + + """ + Specifies the address to delete. + """ + id: ID! ): CustomerAddressDeletePayload """ Updates the address of an existing customer. """ customerAddressUpdate( + """ + The customer’s mailing address. + """ + address: MailingAddressInput! + """ The access token used to identify the customer. """ @@ -6633,11 +8298,6 @@ type Mutation { Specifies the customer address to update. """ id: ID! - - """ - The customer’s mailing address. - """ - address: MailingAddressInput! ): CustomerAddressUpdatePayload """ @@ -6654,20 +8314,18 @@ type Mutation { Updates the default address of an existing customer. """ customerDefaultAddressUpdate( - """ - The access token used to identify the customer. - """ - customerAccessToken: String! - """ ID of the address to set as the new default for the customer. """ addressId: ID! + + """ + The access token used to identify the customer. + """ + customerAccessToken: String! ): CustomerDefaultAddressUpdatePayload - """ - Sends a reset password email to the customer, as the first step in the reset password process. - """ + "\"Sends a reset password email to the customer. The reset password email contains a reset password URL and token that you can pass to the [`customerResetByUrl`](https://shopify.dev/api/storefront/latest/mutations/customerResetByUrl) or [`customerReset`](https://shopify.dev/api/storefront/latest/mutations/customerReset) mutation to reset the customer password.\"\n" customerRecover( """ The email address of the customer to recover. @@ -6675,9 +8333,7 @@ type Mutation { email: String! ): CustomerRecoverPayload - """ - Resets a customer’s password with a token received from `CustomerRecover`. - """ + "\"Resets a customer’s password with the token received from a reset password email. You can send a reset password email with the [`customerRecover`](https://shopify.dev/api/storefront/latest/mutations/customerRecover) mutation.\"\n" customerReset( """ Specifies the customer to reset. @@ -6690,51 +8346,57 @@ type Mutation { input: CustomerResetInput! ): CustomerResetPayload - """ - Resets a customer’s password with the reset password url received from `CustomerRecover`. - """ + "\"Resets a customer’s password with the reset password URL received from a reset password email. You can send a reset password email with the [`customerRecover`](https://shopify.dev/api/storefront/latest/mutations/customerRecover) mutation.\"\n" customerResetByUrl( - """ - The customer's reset password url. - """ - resetUrl: URL! - """ New password that will be set as part of the reset password process. """ password: String! + + """ + The customer's reset password url. + """ + resetUrl: URL! ): CustomerResetByUrlPayload """ Updates an existing customer. """ customerUpdate( - """ - The access token used to identify the customer. - """ - customerAccessToken: String! - """ The customer object input. """ customer: CustomerUpdateInput! + + """ + The access token used to identify the customer. + """ + customerAccessToken: String! ): CustomerUpdatePayload } -""" -An object with an ID to support global identification. -""" +"An object with an ID field to support global identification, in accordance with the\n[Relay specification](https://relay.dev/graphql/objectidentification.htm#sec-Node-Interface).\nThis interface is used by the [node](https://shopify.dev/api/admin-graphql/unstable/queries/node)\nand [nodes](https://shopify.dev/api/admin-graphql/unstable/queries/nodes) queries.\n" interface Node { """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! } +""" +Represents a resource that can be published to the Online Store sales channel. +""" +interface OnlineStorePublishable { + """ + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. + """ + onlineStoreUrl: URL +} + """ An order is a customer’s completed request to purchase one or more products from a shop. An order is created when a customer completes the checkout process, during which time they provides an email address, billing address and payment information. """ -type Order implements Node { +type Order implements HasMetafields & Node { """ The reason for the order's cancellation. Returns `null` if the order wasn't canceled. """ @@ -6755,6 +8417,11 @@ type Order implements Node { """ currentSubtotalPrice: MoneyV2! + """ + The total cost of duties for the order, including refunds. + """ + currentTotalDuties: MoneyV2 + """ The total amount of the order, including duties, taxes and discounts, minus amounts for line items that have been removed. """ @@ -6779,26 +8446,26 @@ type Order implements Node { Discounts that have been applied on the order. """ discountApplications( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -6826,7 +8493,7 @@ type Order implements Node { fulfillmentStatus: OrderFulfillmentStatus! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -6834,26 +8501,26 @@ type Order implements Node { List of the order’s line items. """ lineItems( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -6861,9 +8528,29 @@ type Order implements Node { ): OrderLineItemConnection! """ - Unique identifier for the order that appears on the order. - For example, _#1000_ or _Store1001. + Returns a metafield found by namespace and key. """ + metafield( + """ + The identifier for the metafield. + """ + key: String! + + """ + A container for a set of metafields. + """ + namespace: String! + ): Metafield + + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( + """ + The list of metafields to retrieve by namespace and key. + """ + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! + + "Unique identifier for the order that appears on the order.\nFor example, _#1000_ or _Store1001.\n" name: String! """ @@ -6871,6 +8558,11 @@ type Order implements Node { """ orderNumber: Int! + """ + The total cost of duties charged at checkout. + """ + originalTotalDuties: MoneyV2 + """ The total price of the order before any applied edits. """ @@ -6881,11 +8573,7 @@ type Order implements Node { """ phone: String - """ - The date and time when the order was imported. - This value can be set to dates in the past when importing from other systems. - If no value is provided, it will be auto-generated based on current date and time. - """ + "The date and time when the order was imported.\nThis value can be set to dates in the past when importing from other systems.\nIf no value is provided, it will be auto-generated based on current date and time.\n" processedAt: DateTime! """ @@ -6893,9 +8581,7 @@ type Order implements Node { """ shippingAddress: MailingAddress - """ - The discounts that have been allocated onto the shipping line by discount applications. - """ + "The discounts that have been allocated onto the shipping line by discount applications.\n" shippingDiscountAllocations: [DiscountAllocation!]! """ @@ -6906,7 +8592,7 @@ type Order implements Node { """ Price of the order before shipping and taxes. """ - subtotalPrice: Money @deprecated(reason: "Use `subtotalPriceV2` instead") + subtotalPrice: Money @deprecated(reason: "Use `subtotalPriceV2` instead.") """ Price of the order before duties, shipping and taxes. @@ -6926,7 +8612,7 @@ type Order implements Node { """ The sum of all the prices of all the items in the order, taxes and discounts included (must be positive). """ - totalPrice: Money! @deprecated(reason: "Use `totalPriceV2` instead") + totalPrice: Money! @deprecated(reason: "Use `totalPriceV2` instead.") """ The sum of all the prices of all the items in the order, duties, taxes and discounts included (must be positive). @@ -6936,7 +8622,7 @@ type Order implements Node { """ The total amount that has been refunded. """ - totalRefunded: Money! @deprecated(reason: "Use `totalRefundedV2` instead") + totalRefunded: Money! @deprecated(reason: "Use `totalRefundedV2` instead.") """ The total amount that has been refunded. @@ -6947,7 +8633,7 @@ type Order implements Node { The total cost of shipping. """ totalShippingPrice: Money! - @deprecated(reason: "Use `totalShippingPriceV2` instead") + @deprecated(reason: "Use `totalShippingPriceV2` instead.") """ The total cost of shipping. @@ -6957,7 +8643,7 @@ type Order implements Node { """ The total cost of taxes. """ - totalTax: Money @deprecated(reason: "Use `totalTaxV2` instead") + totalTax: Money @deprecated(reason: "Use `totalTaxV2` instead.") """ The total cost of taxes. @@ -6974,6 +8660,11 @@ enum OrderCancelReason { """ CUSTOMER + """ + Payment was declined. + """ + DECLINED + """ The order was fraudulent. """ @@ -6984,35 +8675,31 @@ enum OrderCancelReason { """ INVENTORY - """ - Payment was declined. - """ - DECLINED - """ The order was canceled for an unlisted reason. """ OTHER } -""" -An auto-generated type for paginating through multiple Orders. -""" +"An auto-generated type for paginating through multiple Orders.\n" type OrderConnection { """ A list of edges. """ edges: [OrderEdge!]! + """ + A list of the nodes contained in OrderEdge. + """ + nodes: [Order!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Order and a cursor during pagination. -""" +"An auto-generated type which holds one Order and a cursor during pagination.\n" type OrderEdge { """ A cursor for use in pagination. @@ -7029,16 +8716,16 @@ type OrderEdge { Represents the order's current financial status. """ enum OrderFinancialStatus { - """ - Displayed as **Pending**. - """ - PENDING - """ Displayed as **Authorized**. """ AUTHORIZED + """ + Displayed as **Paid**. + """ + PAID + """ Displayed as **Partially paid**. """ @@ -7050,64 +8737,69 @@ enum OrderFinancialStatus { PARTIALLY_REFUNDED """ - Displayed as **Voided**. + Displayed as **Pending**. """ - VOIDED - - """ - Displayed as **Paid**. - """ - PAID + PENDING """ Displayed as **Refunded**. """ REFUNDED + + """ + Displayed as **Voided**. + """ + VOIDED } """ -Represents the order's current fulfillment status. +Represents the order's aggregated fulfillment status for display purposes. """ enum OrderFulfillmentStatus { """ - Displayed as **Unfulfilled**. - """ - UNFULFILLED - - """ - Displayed as **Partially fulfilled**. - """ - PARTIALLY_FULFILLED - - """ - Displayed as **Fulfilled**. + Displayed as **Fulfilled**. All of the items in the order have been fulfilled. """ FULFILLED """ - Displayed as **Restocked**. - """ - RESTOCKED - - """ - Displayed as **Pending fulfillment**. - """ - PENDING_FULFILLMENT - - """ - Displayed as **Open**. - """ - OPEN - - """ - Displayed as **In progress**. + Displayed as **In progress**. Some of the items in the order have been fulfilled, or a request for fulfillment has been sent to the fulfillment service. """ IN_PROGRESS """ - Displayed as **Scheduled**. + Displayed as **On hold**. All of the unfulfilled items in this order are on hold. + """ + ON_HOLD + + """ + Displayed as **Open**. None of the items in the order have been fulfilled. Replaced by "UNFULFILLED" status. + """ + OPEN + + """ + Displayed as **Partially fulfilled**. Some of the items in the order have been fulfilled. + """ + PARTIALLY_FULFILLED + + """ + Displayed as **Pending fulfillment**. A request for fulfillment of some items awaits a response from the fulfillment service. Replaced by "IN_PROGRESS" status. + """ + PENDING_FULFILLMENT + + """ + Displayed as **Restocked**. All of the items in the order have been restocked. Replaced by "UNFULFILLED" status. + """ + RESTOCKED + + """ + Displayed as **Scheduled**. All of the unfulfilled items in this order are scheduled for fulfillment at later time. """ SCHEDULED + + """ + Displayed as **Unfulfilled**. None of the items in the order have been fulfilled. + """ + UNFULFILLED } """ @@ -7155,24 +8847,25 @@ type OrderLineItem { variant: ProductVariant } -""" -An auto-generated type for paginating through multiple OrderLineItems. -""" +"An auto-generated type for paginating through multiple OrderLineItems.\n" type OrderLineItemConnection { """ A list of edges. """ edges: [OrderLineItemEdge!]! + """ + A list of the nodes contained in OrderLineItemEdge. + """ + nodes: [OrderLineItem!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one OrderLineItem and a cursor during pagination. -""" +"An auto-generated type which holds one OrderLineItem and a cursor during pagination.\n" type OrderLineItemEdge { """ A cursor for use in pagination. @@ -7189,33 +8882,29 @@ type OrderLineItemEdge { The set of valid sort keys for the Order query. """ enum OrderSortKeys { - """ - Sort by the `processed_at` value. - """ - PROCESSED_AT - - """ - Sort by the `total_price` value. - """ - TOTAL_PRICE - """ Sort by the `id` value. """ ID """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `processed_at` value. """ + PROCESSED_AT + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" RELEVANCE + + """ + Sort by the `total_price` value. + """ + TOTAL_PRICE } """ Shopify merchants can create pages to hold static HTML content. Each Page object represents a custom page on the online store. """ -type Page implements Node { +type Page implements HasMetafields & Node & OnlineStorePublishable { """ The description of the page, complete with HTML formatting. """ @@ -7237,10 +8926,38 @@ type Page implements Node { handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! + """ + Returns a metafield found by namespace and key. + """ + metafield( + """ + The identifier for the metafield. + """ + key: String! + + """ + A container for a set of metafields. + """ + namespace: String! + ): Metafield + + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( + """ + The list of metafields to retrieve by namespace and key. + """ + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! + + """ + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. + """ + onlineStoreUrl: URL + """ The page's SEO information. """ @@ -7255,31 +8972,27 @@ type Page implements Node { The timestamp of the latest page update. """ updatedAt: DateTime! - - """ - The url pointing to the page accessible from the web. - """ - url: URL! } -""" -An auto-generated type for paginating through multiple Pages. -""" +"An auto-generated type for paginating through multiple Pages.\n" type PageConnection { """ A list of edges. """ edges: [PageEdge!]! + """ + A list of the nodes contained in PageEdge. + """ + nodes: [Page!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Page and a cursor during pagination. -""" +"An auto-generated type which holds one Page and a cursor during pagination.\n" type PageEdge { """ A cursor for use in pagination. @@ -7292,25 +9005,41 @@ type PageEdge { node: Page! } -""" -Information about pagination in a connection. -""" +"Returns information about pagination in a connection, in accordance with the\n[Relay specification](https://relay.dev/graphql/connections.htm#sec-undefined.PageInfo).\n" type PageInfo { """ - Indicates if there are more pages to fetch. + The cursor corresponding to the last node in edges. + """ + endCursor: String + + """ + Whether there are more pages to fetch following the current page. """ hasNextPage: Boolean! """ - Indicates if there are any pages prior to the current page. + Whether there are any pages prior to the current page. """ hasPreviousPage: Boolean! + + """ + The cursor corresponding to the first node in edges. + """ + startCursor: String } """ The set of valid sort keys for the Page query. """ enum PageSortKeys { + """ + Sort by the `id` value. + """ + ID + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE + """ Sort by the `title` value. """ @@ -7320,18 +9049,6 @@ enum PageSortKeys { Sort by the `updated_at` value. """ UPDATED_AT - - """ - Sort by the `id` value. - """ - ID - - """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. - """ - RELEVANCE } """ @@ -7341,7 +9058,7 @@ type Payment implements Node { """ The amount of the payment. """ - amount: Money! @deprecated(reason: "Use `amountV2` instead") + amount: Money! @deprecated(reason: "Use `amountV2` instead.") """ The amount of the payment. @@ -7369,15 +9086,11 @@ type Payment implements Node { errorMessage: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! - """ - A client-side generated token to identify a payment and perform idempotent operations. - For more information, refer to - [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). - """ + "A client-side generated token to identify a payment and perform idempotent operations.\nFor more information, refer to\n[Idempotent requests](https://shopify.dev/api/usage/idempotent-requests).\n" idempotencyKey: String """ @@ -7386,7 +9099,7 @@ type Payment implements Node { nextActionUrl: URL """ - Whether or not the payment is still processing asynchronously. + Whether the payment is still processing asynchronously. """ ready: Boolean! @@ -7451,9 +9164,9 @@ enum PaymentTokenType { APPLE_PAY """ - Vault payment token type. + Google Pay token type. """ - VAULT + GOOGLE_PAY """ Shopify Pay token type. @@ -7461,9 +9174,29 @@ enum PaymentTokenType { SHOPIFY_PAY """ - Google Pay token type. + Stripe token type. """ - GOOGLE_PAY + STRIPE_VAULT_TOKEN + + """ + Vault payment token type. + """ + VAULT +} + +""" +A filter used to view a subset of products in a collection matching a specific price range. +""" +input PriceRangeFilter { + """ + The maximum price in the range. Empty indicates no max price. + """ + max: Float + + """ + The minimum price in the range. Defaults to zero. + """ + min: Float = 0 } """ @@ -7485,7 +9218,7 @@ union PricingValue = MoneyV2 | PricingPercentageValue A product represents an individual item for sale in a Shopify store. Products are often physical, but they don't have to be. For example, a digital download (such as a movie, music or ebook file) also qualifies as a product, as do services (such as equipment rental, work for hire, customization of another product or an extended warranty). """ -type Product implements Node & HasMetafields { +type Product implements HasMetafields & Node & OnlineStorePublishable { """ Indicates if at least one product variant is available for sale. """ @@ -7495,26 +9228,26 @@ type Product implements Node & HasMetafields { List of collections a product belongs to. """ collections( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -7546,14 +9279,14 @@ type Product implements Node & HasMetafields { """ descriptionHtml: HTML! - """ - A human-friendly unique string for the Product automatically generated from its title. - They are used by the Liquid templating language to refer to objects. - """ + "The featured image for the product.\n\nThis field is functionally equivalent to `images(first: 1)`.\n" + featuredImage: Image + + "A human-friendly unique string for the Product automatically generated from its title.\nThey are used by the Liquid templating language to refer to objects.\n" handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -7561,26 +9294,26 @@ type Product implements Node & HasMetafields { List of images associated with the product. """ images( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -7590,52 +9323,32 @@ type Product implements Node & HasMetafields { Sort the underlying list by the given key. """ sortKey: ProductImageSortKeys = POSITION - - """ - Image width in pixels between 1 and 2048. This argument is deprecated: Use `maxWidth` on `Image.transformedSrc` instead. - """ - maxWidth: Int - - """ - Image height in pixels between 1 and 2048. This argument is deprecated: Use `maxHeight` on `Image.transformedSrc` instead. - """ - maxHeight: Int - - """ - Crops the image according to the specified region. This argument is deprecated: Use `crop` on `Image.transformedSrc` instead. - """ - crop: CropRegion - - """ - Image size multiplier for high-resolution retina displays. Must be between 1 and 3. This argument is deprecated: Use `scale` on `Image.transformedSrc` instead. - """ - scale: Int = 1 ): ImageConnection! """ The media associated with the product. """ media( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -7648,58 +9361,30 @@ type Product implements Node & HasMetafields { ): MediaConnection! """ - The metafield associated with the resource. + Returns a metafield found by namespace and key. """ metafield( """ - Container for a set of metafields (maximum of 20 characters). - """ - namespace: String! - - """ - Identifier for the metafield (maximum of 30 characters). + The identifier for the metafield. """ key: String! + + """ + A container for a set of metafields. + """ + namespace: String! ): Metafield - """ - A paginated list of metafields associated with the resource. - """ + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" metafields( """ - Container for a set of metafields (maximum of 20 characters). + The list of metafields to retrieve by namespace and key. """ - namespace: String - - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): MetafieldConnection! + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! """ - The online store URL for the product. - A value of `null` indicates that the product is not published to the Online Store sales channel. + The URL used for viewing the resource on the shop's Online Store. Returns `null` if the resource is currently not published to the Online Store sales channel. """ onlineStoreUrl: URL @@ -7713,41 +9398,6 @@ type Product implements Node & HasMetafields { first: Int ): [ProductOption!]! - """ - List of price ranges in the presentment currencies for this shop. - """ - presentmentPriceRanges( - """ - Specifies the presentment currencies to return a price range in. - """ - presentmentCurrencies: [CurrencyCode!] - - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): ProductPriceRangeConnection! - """ The price range. """ @@ -7763,15 +9413,47 @@ type Product implements Node & HasMetafields { """ publishedAt: DateTime! + """ + Whether the product can only be purchased with a selling plan. + """ + requiresSellingPlan: Boolean! + + """ + A list of a product's available selling plan groups. A selling plan group represents a selling method. For example, 'Subscribe and save' is a selling method where customers pay for goods or services per delivery. A selling plan group contains individual selling plans. + """ + sellingPlanGroups( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): SellingPlanGroupConnection! + """ The product's SEO information. """ seo: SEO! - """ - A comma separated list of tags that have been added to the product. - Additional access scope required for private apps: unauthenticated_read_product_tags. - """ + "A comma separated list of tags that have been added to the product.\nAdditional access scope required for private apps: unauthenticated_read_product_tags.\n" tags: [String!]! """ @@ -7784,19 +9466,10 @@ type Product implements Node & HasMetafields { """ totalInventory: Int - """ - The date and time when the product was last modified. - A product's `updatedAt` value can change for different reasons. For example, if an order - is placed for a product that has inventory tracking set up, then the inventory adjustment - is counted as an update. - """ + "The date and time when the product was last modified.\nA product's `updatedAt` value can change for different reasons. For example, if an order\nis placed for a product that has inventory tracking set up, then the inventory adjustment\nis counted as an update.\n" updatedAt: DateTime! - """ - Find a product’s variant based on its selected options. - This is useful for converting a user’s selection of product options into a single matching variant. - If there is not a variant for the selected options, `null` will be returned. - """ + "Find a product’s variant based on its selected options.\nThis is useful for converting a user’s selection of product options into a single matching variant.\nIf there is not a variant for the selected options, `null` will be returned.\n" variantBySelectedOptions( """ The input fields used for a selected option. @@ -7808,26 +9481,26 @@ type Product implements Node & HasMetafields { List of the product’s variants. """ variants( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String - """ - Returns up to the last `n` elements from the list. - """ - last: Int - """ Returns the elements that come before the specified cursor. """ before: String + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + """ Reverse the order of the underlying list. """ @@ -7849,21 +9522,16 @@ type Product implements Node & HasMetafields { The set of valid sort keys for the ProductCollection query. """ enum ProductCollectionSortKeys { - """ - Sort by the `title` value. - """ - TITLE - - """ - Sort by the `price` value. - """ - PRICE - """ Sort by the `best-selling` value. """ BEST_SELLING + """ + Sort by the `collection-default` value. + """ + COLLECTION_DEFAULT + """ Sort by the `created` value. """ @@ -7880,36 +9548,43 @@ enum ProductCollectionSortKeys { MANUAL """ - Sort by the `collection-default` value. + Sort by the `price` value. """ - COLLECTION_DEFAULT + PRICE + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `title` value. """ - RELEVANCE + TITLE } -""" -An auto-generated type for paginating through multiple Products. -""" +"An auto-generated type for paginating through multiple Products.\n" type ProductConnection { """ A list of edges. """ edges: [ProductEdge!]! + """ + A list of available filters. + """ + filters: [Filter!]! + + """ + A list of the nodes contained in ProductEdge. + """ + nodes: [Product!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one Product and a cursor during pagination. -""" +"An auto-generated type which holds one Product and a cursor during pagination.\n" type ProductEdge { """ A cursor for use in pagination. @@ -7922,6 +9597,46 @@ type ProductEdge { node: Product! } +""" +A filter used to view a subset of products in a collection. +""" +input ProductFilter { + """ + Filter on if the product is available for sale. + """ + available: Boolean + + """ + A range of prices to filter with-in. + """ + price: PriceRangeFilter + + """ + A product metafield to filter on. + """ + productMetafield: MetafieldFilter + + """ + The product type to filter on. + """ + productType: String + + """ + The product vendor to filter on. + """ + productVendor: String + + """ + A variant metafield to filter on. + """ + variantMetafield: MetafieldFilter + + """ + A variant option to filter on. + """ + variantOption: VariantOptionFilter +} + """ The set of valid sort keys for the ProductImage query. """ @@ -7931,21 +9646,17 @@ enum ProductImageSortKeys { """ CREATED_AT - """ - Sort by the `position` value. - """ - POSITION - """ Sort by the `id` value. """ ID """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `position` value. """ + POSITION + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" RELEVANCE } @@ -7953,32 +9664,24 @@ enum ProductImageSortKeys { The set of valid sort keys for the ProductMedia query. """ enum ProductMediaSortKeys { - """ - Sort by the `position` value. - """ - POSITION - """ Sort by the `id` value. """ ID """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `position` value. """ + POSITION + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" RELEVANCE } -""" -Product property names like "Size", "Color", and "Material" that the customers can select. -Variants are selected based on permutations of these options. -255 characters limit each. -""" +"Product property names like \"Size\", \"Color\", and \"Material\" that the customers can select.\nVariants are selected based on permutations of these options.\n255 characters limit each.\n" type ProductOption implements Node { """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -8008,59 +9711,14 @@ type ProductPriceRange { minVariantPrice: MoneyV2! } -""" -An auto-generated type for paginating through multiple ProductPriceRanges. -""" -type ProductPriceRangeConnection { - """ - A list of edges. - """ - edges: [ProductPriceRangeEdge!]! - - """ - Information to aid in pagination. - """ - pageInfo: PageInfo! -} - -""" -An auto-generated type which holds one ProductPriceRange and a cursor during pagination. -""" -type ProductPriceRangeEdge { - """ - A cursor for use in pagination. - """ - cursor: String! - - """ - The item at the end of ProductPriceRangeEdge. - """ - node: ProductPriceRange! -} - """ The set of valid sort keys for the Product query. """ enum ProductSortKeys { """ - Sort by the `title` value. + Sort by the `best_selling` value. """ - TITLE - - """ - Sort by the `product_type` value. - """ - PRODUCT_TYPE - - """ - Sort by the `vendor` value. - """ - VENDOR - - """ - Sort by the `updated_at` value. - """ - UPDATED_AT + BEST_SELLING """ Sort by the `created_at` value. @@ -8068,9 +9726,9 @@ enum ProductSortKeys { CREATED_AT """ - Sort by the `best_selling` value. + Sort by the `id` value. """ - BEST_SELLING + ID """ Sort by the `price` value. @@ -8078,36 +9736,47 @@ enum ProductSortKeys { PRICE """ - Sort by the `id` value. + Sort by the `product_type` value. """ - ID + PRODUCT_TYPE + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. + Sort by the `title` value. """ - RELEVANCE + TITLE + + """ + Sort by the `updated_at` value. + """ + UPDATED_AT + + """ + Sort by the `vendor` value. + """ + VENDOR } """ A product variant represents a different version of a product, such as differing sizes or differing colors. """ -type ProductVariant implements Node & HasMetafields { - """ - Indicates if the product variant is in stock. - """ - available: Boolean @deprecated(reason: "Use `availableForSale` instead") - +type ProductVariant implements HasMetafields & Node { """ Indicates if the product variant is available for sale. """ availableForSale: Boolean! + """ + The barcode (for example, ISBN, UPC, or GTIN) associated with the variant. + """ + barcode: String + """ The compare at price of the variant. This can be used to mark a variant as on sale, when `compareAtPrice` is higher than `price`. """ - compareAtPrice: Money @deprecated(reason: "Use `compareAtPriceV2` instead") + compareAtPrice: Money @deprecated(reason: "Use `compareAtPriceV2` instead.") """ The compare at price of the variant. This can be used to mark a variant as on sale, when `compareAtPriceV2` is higher than `priceV2`. @@ -8120,159 +9789,40 @@ type ProductVariant implements Node & HasMetafields { currentlyNotInStock: Boolean! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! - """ - Image associated with the product variant. This field falls back to the product image if no image is available. - """ - image( - """ - Image width in pixels between 1 and 2048. This argument is deprecated: Use `maxWidth` on `Image.transformedSrc` instead. - """ - maxWidth: Int - - """ - Image height in pixels between 1 and 2048. This argument is deprecated: Use `maxHeight` on `Image.transformedSrc` instead. - """ - maxHeight: Int - - """ - Crops the image according to the specified region. This argument is deprecated: Use `crop` on `Image.transformedSrc` instead. - """ - crop: CropRegion - - """ - Image size multiplier for high-resolution retina displays. Must be between 1 and 3. This argument is deprecated: Use `scale` on `Image.transformedSrc` instead. - """ - scale: Int = 1 - ): Image + "Image associated with the product variant. This field falls back to the product image if no image is available.\n" + image: Image """ - The metafield associated with the resource. + Returns a metafield found by namespace and key. """ metafield( """ - Container for a set of metafields (maximum of 20 characters). - """ - namespace: String! - - """ - Identifier for the metafield (maximum of 30 characters). + The identifier for the metafield. """ key: String! + + """ + A container for a set of metafields. + """ + namespace: String! ): Metafield - """ - A paginated list of metafields associated with the resource. - """ + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" metafields( """ - Container for a set of metafields (maximum of 20 characters). + The list of metafields to retrieve by namespace and key. """ - namespace: String - - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): MetafieldConnection! - - """ - List of prices and compare-at prices in the presentment currencies for this shop. - """ - presentmentPrices( - """ - The presentment currencies prices should return in. - """ - presentmentCurrencies: [CurrencyCode!] - - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): ProductVariantPricePairConnection! - - """ - List of unit prices in the presentment currencies for this shop. - """ - presentmentUnitPrices( - """ - Specify the currencies in which to return presentment unit prices. - """ - presentmentCurrencies: [CurrencyCode!] - - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - ): MoneyV2Connection! + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! """ The product variant’s price. """ - price: Money! @deprecated(reason: "Use `priceV2` instead") + price: Money! @deprecated(reason: "Use `priceV2` instead.") """ The product variant’s price. @@ -8299,11 +9849,71 @@ type ProductVariant implements Node & HasMetafields { """ selectedOptions: [SelectedOption!]! + """ + Represents an association between a variant and a selling plan. Selling plan allocations describe which selling plans are available for each variant, and what their impact is on pricing. + """ + sellingPlanAllocations( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): SellingPlanAllocationConnection! + """ The SKU (stock keeping unit) associated with the variant. """ sku: String + """ + The in-store pickup availability of this variant by location. + """ + storeAvailability( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): StoreAvailabilityConnection! + """ The product variant’s title. """ @@ -8330,24 +9940,25 @@ type ProductVariant implements Node & HasMetafields { weightUnit: WeightUnit! } -""" -An auto-generated type for paginating through multiple ProductVariants. -""" +"An auto-generated type for paginating through multiple ProductVariants.\n" type ProductVariantConnection { """ A list of edges. """ edges: [ProductVariantEdge!]! + """ + A list of the nodes contained in ProductVariantEdge. + """ + nodes: [ProductVariant!]! + """ Information to aid in pagination. """ pageInfo: PageInfo! } -""" -An auto-generated type which holds one ProductVariant and a cursor during pagination. -""" +"An auto-generated type which holds one ProductVariant and a cursor during pagination.\n" type ProductVariantEdge { """ A cursor for use in pagination. @@ -8360,59 +9971,22 @@ type ProductVariantEdge { node: ProductVariant! } -""" -The compare-at price and price of a variant sharing a currency. -""" -type ProductVariantPricePair { - """ - The compare-at price of the variant with associated currency. - """ - compareAtPrice: MoneyV2 - - """ - The price of the variant with associated currency. - """ - price: MoneyV2! -} - -""" -An auto-generated type for paginating through multiple ProductVariantPricePairs. -""" -type ProductVariantPricePairConnection { - """ - A list of edges. - """ - edges: [ProductVariantPricePairEdge!]! - - """ - Information to aid in pagination. - """ - pageInfo: PageInfo! -} - -""" -An auto-generated type which holds one ProductVariantPricePair and a cursor during pagination. -""" -type ProductVariantPricePairEdge { - """ - A cursor for use in pagination. - """ - cursor: String! - - """ - The item at the end of ProductVariantPricePairEdge. - """ - node: ProductVariantPricePair! -} - """ The set of valid sort keys for the ProductVariant query. """ enum ProductVariantSortKeys { """ - Sort by the `title` value. + Sort by the `id` value. """ - TITLE + ID + + """ + Sort by the `position` value. + """ + POSITION + + "Sort by relevance to the search terms when the `query` parameter is specified on the connection.\nDon't use this sort key when no search query is specified.\n" + RELEVANCE """ Sort by the `sku` value. @@ -8420,21 +9994,9 @@ enum ProductVariantSortKeys { SKU """ - Sort by the `position` value. + Sort by the `title` value. """ - POSITION - - """ - Sort by the `id` value. - """ - ID - - """ - During a search (i.e. when the `query` parameter has been specified on the connection) this sorts the - results by relevance to the search term(s). When no search query is specified, this sort key is not - deterministic and should not be used. - """ - RELEVANCE + TITLE } """ @@ -8445,25 +10007,28 @@ type QueryRoot { List of the shop's articles. """ articles( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `author`\n - `blog_title`\n - `created_at`\n - `tag`\n - `tag_not`\n - `updated_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -8474,21 +10039,23 @@ type QueryRoot { Sort the underlying list by the given key. """ sortKey: ArticleSortKeys = ID - - """ - Supported filter parameters: - - `author` - - `blog_title` - - `created_at` - - `tag` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): ArticleConnection! + """ + Fetch a specific `Blog` by one of its unique attributes. + """ + blog( + """ + The handle of the `Blog`. + """ + handle: String + + """ + The ID of the `Blog`. + """ + id: ID + ): Blog + """ Find a blog by its handle. """ @@ -8497,31 +10064,34 @@ type QueryRoot { The handle of the blog. """ handle: String! - ): Blog + ): Blog @deprecated(reason: "Use `blog` instead.") """ List of the shop's blogs. """ blogs( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `created_at`\n - `handle`\n - `title`\n - `updated_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -8532,20 +10102,33 @@ type QueryRoot { Sort the underlying list by the given key. """ sortKey: BlogSortKeys = ID - - """ - Supported filter parameters: - - `created_at` - - `handle` - - `title` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): BlogConnection! + """ + Retrieve a cart by its ID. For more information, refer to [Manage a cart with the Storefront API](https://shopify.dev/api/examples/cart). + """ + cart( + """ + The ID of the cart. + """ + id: ID! + ): Cart + + """ + Fetch a specific `Collection` by one of its unique attributes. + """ + collection( + """ + The handle of the `Collection`. + """ + handle: String + + """ + The ID of the `Collection`. + """ + id: ID + ): Collection + """ Find a collection by its handle. """ @@ -8554,31 +10137,34 @@ type QueryRoot { The handle of the collection. """ handle: String! - ): Collection + ): Collection @deprecated(reason: "Use `collection` instead.") """ List of the shop’s collections. """ collections( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `collection_type`\n - `title`\n - `updated_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -8589,17 +10175,6 @@ type QueryRoot { Sort the underlying list by the given key. """ sortKey: CollectionSortKeys = ID - - """ - Supported filter parameters: - - `collection_type` - - `title` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): CollectionConnection! """ @@ -8612,6 +10187,59 @@ type QueryRoot { customerAccessToken: String! ): Customer + """ + Returns the localized experiences configured for the shop. + """ + localization: Localization! + + "List of the shop's locations that support in-store pickup.\n\nWhen sorting by distance, you must specify a location via the `near` argument.\n" + locations( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Used to sort results based on proximity to the provided location. + """ + near: GeoCoordinateInput + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + + """ + Sort the underlying list by the given key. + """ + sortKey: LocationSortKeys = ID + ): LocationConnection! + + """ + A storefront menu. + """ + menu( + """ + Returns a storefront menu by the specified handle. + """ + handle: String! + ): Menu + """ Returns a specific node by ID. """ @@ -8632,6 +10260,21 @@ type QueryRoot { ids: [ID!]! ): [Node]! + """ + Fetch a specific `Page` by one of its unique attributes. + """ + page( + """ + The handle of the `Page`. + """ + handle: String + + """ + The ID of the `Page`. + """ + id: ID + ): Page + """ Find a page by its handle. """ @@ -8640,31 +10283,34 @@ type QueryRoot { The handle of the page. """ handle: String! - ): Page + ): Page @deprecated(reason: "Use `page` instead.") """ List of the shop's pages. """ pages( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `created_at`\n - `handle`\n - `title`\n - `updated_at`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -8675,35 +10321,34 @@ type QueryRoot { Sort the underlying list by the given key. """ sortKey: PageSortKeys = ID - - """ - Supported filter parameters: - - `created_at` - - `handle` - - `title` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): PageConnection! + """ + Fetch a specific `Product` by one of its unique attributes. + """ + product( + """ + The handle of the `Product`. + """ + handle: String + + """ + The ID of the `Product`. + """ + id: ID + ): Product + """ Find a product by its handle. """ productByHandle( """ - The handle of the product. + A unique string that identifies the product. Handles are automatically generated based on the product's title, and are always lowercase. Whitespace and special characters are replaced with a hyphen: `-`. If there are multiple consecutive whitespace or special characters, then they're replaced with a single hyphen. Whitespace or special characters at the beginning are removed. If a duplicate product title is used, then the handle is auto-incremented by one. For example, if you had two products called `Potion`, then their handles would be `potion` and `potion-1`. After a product has been created, changing the product title doesn't update the handle. """ handle: String! - ): Product + ): Product @deprecated(reason: "Use `product` instead.") - """ - Find recommended products related to a given `product_id`. - To learn more about how recommendations are generated, see - [*Showing product recommendations on product pages*](https://help.shopify.com/themes/development/recommended-products). - """ + "Find recommended products related to a given `product_id`.\nTo learn more about how recommendations are generated, see\n[*Showing product recommendations on product pages*](https://help.shopify.com/themes/development/recommended-products).\n" productRecommendations( """ The id of the product. @@ -8711,10 +10356,7 @@ type QueryRoot { productId: ID! ): [Product!] - """ - Tags added to products. - Additional access scope required: unauthenticated_read_product_tags. - """ + "Tags added to products.\nAdditional access scope required: unauthenticated_read_product_tags.\n" productTags( """ Returns up to the first `n` elements from the list. @@ -8736,25 +10378,28 @@ type QueryRoot { List of the shop’s products. """ products( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - """ Returns the elements that come after the specified cursor. """ after: String + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + """ Returns up to the last `n` elements from the list. """ last: Int - """ - Returns the elements that come before the specified cursor. - """ - before: String + "Supported filter parameters:\n - `available_for_sale`\n - `created_at`\n - `product_type`\n - `tag`\n - `tag_not`\n - `title`\n - `updated_at`\n - `variants.price`\n - `vendor`\n\nSee the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)\nfor more information about using filters.\n" + query: String """ Reverse the order of the underlying list. @@ -8765,22 +10410,6 @@ type QueryRoot { Sort the underlying list by the given key. """ sortKey: ProductSortKeys = ID - - """ - Supported filter parameters: - - `available_for_sale` - - `created_at` - - `product_type` - - `tag` - - `title` - - `updated_at` - - `variants.price` - - `vendor` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String ): ProductConnection! """ @@ -8792,6 +10421,36 @@ type QueryRoot { The shop associated with the storefront access token. """ shop: Shop! + + """ + A list of redirects for a shop. + """ + urlRedirects( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): UrlRedirectConnection! } """ @@ -8809,21 +10468,13 @@ type SEO { title: String } -""" -Script discount applications capture the intentions of a discount that -was created by a Shopify Script. -""" +"Script discount applications capture the intentions of a discount that\nwas created by a Shopify Script.\n" type ScriptDiscountApplication implements DiscountApplication { """ The method by which the discount's value is allocated to its entitled items. """ allocationMethod: DiscountApplicationAllocationMethod! - """ - The description of the application as defined by the Script. - """ - description: String! @deprecated(reason: "Use `title` instead") - """ Which lines of targetType that the discount is allocated over. """ @@ -8845,10 +10496,7 @@ type ScriptDiscountApplication implements DiscountApplication { value: PricingValue! } -""" -Properties used by customers to select a product variant. -Products can have multiple options, like different sizes or colors. -""" +"Properties used by customers to select a product variant.\nProducts can have multiple options, like different sizes or colors.\n" type SelectedOption { """ The product option’s name. @@ -8876,6 +10524,371 @@ input SelectedOptionInput { value: String! } +""" +Represents how products and variants can be sold and purchased. +""" +type SellingPlan { + """ + The initial payment due for the purchase. + """ + checkoutCharge: SellingPlanCheckoutCharge! + + """ + The description of the selling plan. + """ + description: String + + """ + A globally-unique identifier. + """ + id: ID! + + """ + The name of the selling plan. For example, '6 weeks of prepaid granola, delivered weekly'. + """ + name: String! + + """ + The selling plan options available in the drop-down list in the storefront. For example, 'Delivery every week' or 'Delivery every 2 weeks' specifies the delivery frequency options for the product. Individual selling plans contribute their options to the associated selling plan group. For example, a selling plan group might have an option called `option1: Delivery every`. One selling plan in that group could contribute `option1: 2 weeks` with the pricing for that option, and another selling plan could contribute `option1: 4 weeks`, with different pricing. + """ + options: [SellingPlanOption!]! + + """ + The price adjustments that a selling plan makes when a variant is purchased with a selling plan. + """ + priceAdjustments: [SellingPlanPriceAdjustment!]! + + """ + Whether purchasing the selling plan will result in multiple deliveries. + """ + recurringDeliveries: Boolean! +} + +""" +Represents an association between a variant and a selling plan. Selling plan allocations describe the options offered for each variant, and the price of the variant when purchased with a selling plan. +""" +type SellingPlanAllocation { + """ + The checkout charge amount due for the purchase. + """ + checkoutChargeAmount: MoneyV2! + + """ + A list of price adjustments, with a maximum of two. When there are two, the first price adjustment goes into effect at the time of purchase, while the second one starts after a certain number of orders. A price adjustment represents how a selling plan affects pricing when a variant is purchased with a selling plan. Prices display in the customer's currency if the shop is configured for it. + """ + priceAdjustments: [SellingPlanAllocationPriceAdjustment!]! + + """ + The remaining balance charge amount due for the purchase. + """ + remainingBalanceChargeAmount: MoneyV2! + + """ + A representation of how products and variants can be sold and purchased. For example, an individual selling plan could be '6 weeks of prepaid granola, delivered weekly'. + """ + sellingPlan: SellingPlan! +} + +"An auto-generated type for paginating through multiple SellingPlanAllocations.\n" +type SellingPlanAllocationConnection { + """ + A list of edges. + """ + edges: [SellingPlanAllocationEdge!]! + + """ + A list of the nodes contained in SellingPlanAllocationEdge. + """ + nodes: [SellingPlanAllocation!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one SellingPlanAllocation and a cursor during pagination.\n" +type SellingPlanAllocationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of SellingPlanAllocationEdge. + """ + node: SellingPlanAllocation! +} + +""" +The resulting prices for variants when they're purchased with a specific selling plan. +""" +type SellingPlanAllocationPriceAdjustment { + """ + The price of the variant when it's purchased without a selling plan for the same number of deliveries. For example, if a customer purchases 6 deliveries of $10.00 granola separately, then the price is 6 x $10.00 = $60.00. + """ + compareAtPrice: MoneyV2! + + """ + The effective price for a single delivery. For example, for a prepaid subscription plan that includes 6 deliveries at the price of $48.00, the per delivery price is $8.00. + """ + perDeliveryPrice: MoneyV2! + + """ + The price of the variant when it's purchased with a selling plan For example, for a prepaid subscription plan that includes 6 deliveries of $10.00 granola, where the customer gets 20% off, the price is 6 x $10.00 x 0.80 = $48.00. + """ + price: MoneyV2! + + """ + The resulting price per unit for the variant associated with the selling plan. If the variant isn't sold by quantity or measurement, then this field returns `null`. + """ + unitPrice: MoneyV2 +} + +""" +The initial payment due for the purchase. +""" +type SellingPlanCheckoutCharge { + """ + The charge type for the checkout charge. + """ + type: SellingPlanCheckoutChargeType! + + """ + The charge value for the checkout charge. + """ + value: SellingPlanCheckoutChargeValue! +} + +""" +The percentage value of the price used for checkout charge. +""" +type SellingPlanCheckoutChargePercentageValue { + """ + The percentage value of the price used for checkout charge. + """ + percentage: Float! +} + +""" +The checkout charge when the full amount isn't charged at checkout. +""" +enum SellingPlanCheckoutChargeType { + """ + The checkout charge is a percentage of the product or variant price. + """ + PERCENTAGE + + """ + The checkout charge is a fixed price amount. + """ + PRICE +} + +""" +The portion of the price to be charged at checkout. +""" +union SellingPlanCheckoutChargeValue = + MoneyV2 + | SellingPlanCheckoutChargePercentageValue + +"An auto-generated type for paginating through multiple SellingPlans.\n" +type SellingPlanConnection { + """ + A list of edges. + """ + edges: [SellingPlanEdge!]! + + """ + A list of the nodes contained in SellingPlanEdge. + """ + nodes: [SellingPlan!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one SellingPlan and a cursor during pagination.\n" +type SellingPlanEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of SellingPlanEdge. + """ + node: SellingPlan! +} + +""" +A fixed amount that's deducted from the original variant price. For example, $10.00 off. +""" +type SellingPlanFixedAmountPriceAdjustment { + """ + The money value of the price adjustment. + """ + adjustmentAmount: MoneyV2! +} + +""" +A fixed price adjustment for a variant that's purchased with a selling plan. +""" +type SellingPlanFixedPriceAdjustment { + """ + A new price of the variant when it's purchased with the selling plan. + """ + price: MoneyV2! +} + +""" +Represents a selling method. For example, 'Subscribe and save' is a selling method where customers pay for goods or services per delivery. A selling plan group contains individual selling plans. +""" +type SellingPlanGroup { + """ + A display friendly name for the app that created the selling plan group. + """ + appName: String + + """ + The name of the selling plan group. + """ + name: String! + + """ + Represents the selling plan options available in the drop-down list in the storefront. For example, 'Delivery every week' or 'Delivery every 2 weeks' specifies the delivery frequency options for the product. + """ + options: [SellingPlanGroupOption!]! + + """ + A list of selling plans in a selling plan group. A selling plan is a representation of how products and variants can be sold and purchased. For example, an individual selling plan could be '6 weeks of prepaid granola, delivered weekly'. + """ + sellingPlans( + """ + Returns the elements that come after the specified cursor. + """ + after: String + + """ + Returns the elements that come before the specified cursor. + """ + before: String + + """ + Returns up to the first `n` elements from the list. + """ + first: Int + + """ + Returns up to the last `n` elements from the list. + """ + last: Int + + """ + Reverse the order of the underlying list. + """ + reverse: Boolean = false + ): SellingPlanConnection! +} + +"An auto-generated type for paginating through multiple SellingPlanGroups.\n" +type SellingPlanGroupConnection { + """ + A list of edges. + """ + edges: [SellingPlanGroupEdge!]! + + """ + A list of the nodes contained in SellingPlanGroupEdge. + """ + nodes: [SellingPlanGroup!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one SellingPlanGroup and a cursor during pagination.\n" +type SellingPlanGroupEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of SellingPlanGroupEdge. + """ + node: SellingPlanGroup! +} + +""" +Represents an option on a selling plan group that's available in the drop-down list in the storefront. + +Individual selling plans contribute their options to the associated selling plan group. For example, a selling plan group might have an option called `option1: Delivery every`. One selling plan in that group could contribute `option1: 2 weeks` with the pricing for that option, and another selling plan could contribute `option1: 4 weeks`, with different pricing. +""" +type SellingPlanGroupOption { + """ + The name of the option. For example, 'Delivery every'. + """ + name: String! + + """ + The values for the options specified by the selling plans in the selling plan group. For example, '1 week', '2 weeks', '3 weeks'. + """ + values: [String!]! +} + +""" +An option provided by a Selling Plan. +""" +type SellingPlanOption { + """ + The name of the option (ie "Delivery every"). + """ + name: String + + """ + The value of the option (ie "Month"). + """ + value: String +} + +""" +A percentage amount that's deducted from the original variant price. For example, 10% off. +""" +type SellingPlanPercentagePriceAdjustment { + """ + The percentage value of the price adjustment. + """ + adjustmentPercentage: Int! +} + +""" +Represents by how much the price of a variant associated with a selling plan is adjusted. Each variant can have up to two price adjustments. If a variant has multiple price adjustments, then the first price adjustment applies when the variant is initially purchased. The second price adjustment applies after a certain number of orders (specified by the `orderCount` field) are made. If a selling plan doesn't have any price adjustments, then the unadjusted price of the variant is the effective price. +""" +type SellingPlanPriceAdjustment { + """ + The type of price adjustment. An adjustment value can have one of three types: percentage, amount off, or a new price. + """ + adjustmentValue: SellingPlanPriceAdjustmentValue! + + """ + The number of orders that the price adjustment applies to. If the price adjustment always applies, then this field is `null`. + """ + orderCount: Int +} + +""" +Represents by how much the price of a variant associated with a selling plan is adjusted. Each variant can have up to two price adjustments. +""" +union SellingPlanPriceAdjustmentValue = + SellingPlanFixedAmountPriceAdjustment + | SellingPlanFixedPriceAdjustment + | SellingPlanPercentagePriceAdjustment + """ A shipping rate to be applied to a checkout. """ @@ -8888,7 +10901,7 @@ type ShippingRate { """ Price of this shipping rate. """ - price: Money! @deprecated(reason: "Use `priceV2` instead") + price: Money! @deprecated(reason: "Use `priceV2` instead.") """ Price of this shipping rate. @@ -8904,171 +10917,40 @@ type ShippingRate { """ Shop represents a collection of the general settings and information about the shop. """ -type Shop { - """ - List of the shop' articles. - """ - articles( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - - """ - Sort the underlying list by the given key. - """ - sortKey: ArticleSortKeys = ID - - """ - Supported filter parameters: - - `author` - - `blog_title` - - `created_at` - - `tag` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String - ): ArticleConnection! @deprecated(reason: "Use `QueryRoot.articles` instead.") - - """ - List of the shop' blogs. - """ - blogs( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - - """ - Sort the underlying list by the given key. - """ - sortKey: BlogSortKeys = ID - - """ - Supported filter parameters: - - `created_at` - - `handle` - - `title` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String - ): BlogConnection! @deprecated(reason: "Use `QueryRoot.blogs` instead.") - - """ - Find a collection by its handle. - """ - collectionByHandle( - """ - The handle of the collection. - """ - handle: String! - ): Collection - @deprecated(reason: "Use `QueryRoot.collectionByHandle` instead.") - - """ - List of the shop’s collections. - """ - collections( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - - """ - Sort the underlying list by the given key. - """ - sortKey: CollectionSortKeys = ID - - """ - Supported filter parameters: - - `collection_type` - - `title` - - `updated_at` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String - ): CollectionConnection! - @deprecated(reason: "Use `QueryRoot.collections` instead.") - - """ - The three-letter code for the currency that the shop accepts. - """ - currencyCode: CurrencyCode! - @deprecated(reason: "Use `paymentSettings` instead") - +type Shop implements HasMetafields & Node { """ A description of the shop. """ description: String + """ + A globally-unique identifier. + """ + id: ID! + + """ + Returns a metafield found by namespace and key. + """ + metafield( + """ + The identifier for the metafield. + """ + key: String! + + """ + A container for a set of metafields. + """ + namespace: String! + ): Metafield + + "The metafields associated with the resource matching the supplied list of namespaces and keys.\n" + metafields( + """ + The list of metafields to retrieve by namespace and key. + """ + identifiers: [HasMetafieldsIdentifier!]! + ): [Metafield]! + """ A string representing the way currency is formatted when the currency isn’t specified. """ @@ -9085,7 +10967,7 @@ type Shop { paymentSettings: PaymentSettings! """ - The shop’s primary domain. + The primary domain of the shop’s Online Store. """ primaryDomain: Domain! @@ -9094,90 +10976,6 @@ type Shop { """ privacyPolicy: ShopPolicy - """ - Find a product by its handle. - """ - productByHandle( - """ - The handle of the product. - """ - handle: String! - ): Product @deprecated(reason: "Use `QueryRoot.productByHandle` instead.") - - """ - A list of tags that have been added to products. - Additional access scope required: unauthenticated_read_product_tags. - """ - productTags( - """ - Returns up to the first `n` elements from the list. - """ - first: Int! - ): StringConnection! - @deprecated(reason: "Use `QueryRoot.productTags` instead.") - - """ - List of the shop’s product types. - """ - productTypes( - """ - Returns up to the first `n` elements from the list. - """ - first: Int! - ): StringConnection! - @deprecated(reason: "Use `QueryRoot.productTypes` instead.") - - """ - List of the shop’s products. - """ - products( - """ - Returns up to the first `n` elements from the list. - """ - first: Int - - """ - Returns the elements that come after the specified cursor. - """ - after: String - - """ - Returns up to the last `n` elements from the list. - """ - last: Int - - """ - Returns the elements that come before the specified cursor. - """ - before: String - - """ - Reverse the order of the underlying list. - """ - reverse: Boolean = false - - """ - Sort the underlying list by the given key. - """ - sortKey: ProductSortKeys = ID - - """ - Supported filter parameters: - - `available_for_sale` - - `created_at` - - `product_type` - - `tag` - - `title` - - `updated_at` - - `variants.price` - - `vendor` - - See the detailed [search syntax](https://help.shopify.com/api/getting-started/search-syntax) - for more information about using filters. - """ - query: String - ): ProductConnection! @deprecated(reason: "Use `QueryRoot.products` instead.") - """ The shop’s refund policy. """ @@ -9194,10 +10992,9 @@ type Shop { shipsToCountries: [CountryCode!]! """ - The shop’s Shopify Payments account id. + The shop’s subscription policy. """ - shopifyPaymentsAccountId: String - @deprecated(reason: "Use `paymentSettings` instead") + subscriptionPolicy: ShopPolicyWithDefault """ The shop’s terms of service. @@ -9220,7 +11017,7 @@ type ShopPolicy implements Node { handle: String! """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -9235,9 +11032,84 @@ type ShopPolicy implements Node { url: URL! } -""" -An auto-generated type for paginating through multiple Strings. -""" +"A policy for the store that comes with a default value, such as a subscription policy.\nIf the merchant hasn't configured a policy for their store, then the policy will return the default value.\nOtherwise, the policy will return the merchant-configured value.\n" +type ShopPolicyWithDefault { + """ + The text of the policy. Maximum size: 64KB. + """ + body: String! + + """ + The handle of the policy. + """ + handle: String! + + """ + The unique identifier of the policy. A default policy doesn't have an ID. + """ + id: ID + + """ + The title of the policy. + """ + title: String! + + """ + Public URL to the policy. + """ + url: URL! +} + +"The availability of a product variant at a particular location.\nLocal pick-up must be enabled in the store's shipping settings, otherwise this will return an empty result.\n" +type StoreAvailability { + """ + Whether the product variant is in-stock at this location. + """ + available: Boolean! + + """ + The location where this product variant is stocked at. + """ + location: Location! + + """ + Returns the estimated amount of time it takes for pickup to be ready (Example: Usually ready in 24 hours). + """ + pickUpTime: String! +} + +"An auto-generated type for paginating through multiple StoreAvailabilities.\n" +type StoreAvailabilityConnection { + """ + A list of edges. + """ + edges: [StoreAvailabilityEdge!]! + + """ + A list of the nodes contained in StoreAvailabilityEdge. + """ + nodes: [StoreAvailability!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one StoreAvailability and a cursor during pagination.\n" +type StoreAvailabilityEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of StoreAvailabilityEdge. + """ + node: StoreAvailability! +} + +"An auto-generated type for paginating through a list of Strings.\n" type StringConnection { """ A list of edges. @@ -9250,9 +11122,7 @@ type StringConnection { pageInfo: PageInfo! } -""" -An auto-generated type which holds one String and a cursor during pagination. -""" +"An auto-generated type which holds one String and a cursor during pagination.\n" type StringEdge { """ A cursor for use in pagination. @@ -9265,107 +11135,27 @@ type StringEdge { node: String! } -""" -Specifies the fields required to complete a checkout with -a tokenized payment. -""" -input TokenizedPaymentInput { - """ - The amount of the payment. - """ - amount: Money! - - """ - A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). - """ - idempotencyKey: String! - - """ - The billing address for the payment. - """ - billingAddress: MailingAddressInput! - - """ - The type of payment token. - """ - type: String! - - """ - A simple string or JSON containing the required payment data for the tokenized payment. - """ - paymentData: String! - - """ - Executes the payment in test mode if possible. Defaults to `false`. - """ - test: Boolean - - """ - Public Hash Key used for AndroidPay payments only. - """ - identifier: String -} - -""" -Specifies the fields required to complete a checkout with -a tokenized payment. -""" -input TokenizedPaymentInputV2 { - """ - The amount and currency of the payment. - """ - paymentAmount: MoneyInput! - - """ - A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). - """ - idempotencyKey: String! - - """ - The billing address for the payment. - """ - billingAddress: MailingAddressInput! - - """ - A simple string or JSON containing the required payment data for the tokenized payment. - """ - paymentData: String! - - """ - Whether to execute the payment in test mode, if possible. Test mode is not supported in production stores. Defaults to `false`. - """ - test: Boolean - - """ - Public Hash Key used for AndroidPay payments only. - """ - identifier: String - - """ - The type of payment token. - """ - type: String! -} - -""" -Specifies the fields required to complete a checkout with -a tokenized payment. -""" +"Specifies the fields required to complete a checkout with\na tokenized payment.\n" input TokenizedPaymentInputV3 { """ - The amount and currency of the payment. + The billing address for the payment. """ - paymentAmount: MoneyInput! + billingAddress: MailingAddressInput! """ - A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/concepts/about-apis/idempotent-requests). + A unique client generated key used to avoid duplicate charges. When a duplicate payment is found, the original is returned instead of creating a new one. For more information, refer to [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests). """ idempotencyKey: String! """ - The billing address for the payment. + Public Hash Key used for AndroidPay payments only. """ - billingAddress: MailingAddressInput! + identifier: String + + """ + The amount and currency of the payment. + """ + paymentAmount: MoneyInput! """ A simple string or JSON containing the required payment data for the tokenized payment. @@ -9375,12 +11165,7 @@ input TokenizedPaymentInputV3 { """ Whether to execute the payment in test mode, if possible. Test mode is not supported in production stores. Defaults to `false`. """ - test: Boolean - - """ - Public Hash Key used for AndroidPay payments only. - """ - identifier: String + test: Boolean = false """ The type of payment token. @@ -9395,7 +11180,7 @@ type Transaction { """ The amount of money that the transaction was for. """ - amount: Money! @deprecated(reason: "Use `amountV2` instead") + amount: Money! @deprecated(reason: "Use `amountV2` instead.") """ The amount of money that the transaction was for. @@ -9410,7 +11195,7 @@ type Transaction { """ The status of the transaction. """ - status: TransactionStatus! @deprecated(reason: "Use `statusV2` instead") + status: TransactionStatus! @deprecated(reason: "Use `statusV2` instead.") """ The status of the transaction. @@ -9427,10 +11212,8 @@ type Transaction { The different kinds of order transactions. """ enum TransactionKind { - """ - An authorization and capture performed together in a single step. - """ - SALE + "An amount reserved against the cardholder's funding source.\nMoney does not change hands until the authorization is captured.\n" + AUTHORIZATION """ A transfer of the money that was reserved during the authorization stage. @@ -9438,10 +11221,9 @@ enum TransactionKind { CAPTURE """ - An amount reserved against the cardholder's funding source. - Money does not change hands until the authorization is captured. + Money returned to the customer when they have paid too much. """ - AUTHORIZATION + CHANGE """ An authorization for a payment taken with an EMV credit card reader. @@ -9449,15 +11231,25 @@ enum TransactionKind { EMV_AUTHORIZATION """ - Money returned to the customer when they have paid too much. + An authorization and capture performed together in a single step. """ - CHANGE + SALE } """ Transaction statuses describe the status of a transaction. """ enum TransactionStatus { + """ + There was an error while processing the transaction. + """ + ERROR + + """ + The transaction failed. + """ + FAILURE + """ The transaction is pending. """ @@ -9467,28 +11259,12 @@ enum TransactionStatus { The transaction succeeded. """ SUCCESS - - """ - The transaction failed. - """ - FAILURE - - """ - There was an error while processing the transaction. - """ - ERROR } -""" -An RFC 3986 and RFC 3987 compliant URI string. - -Example value: `"https://johns-apparel.myshopify.com"`. -""" +"Represents an [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) and\n[RFC 3987](https://datatracker.ietf.org/doc/html/rfc3987)-compliant URI string.\n\nFor example, `\"https://johns-apparel.myshopify.com\"` is a valid URL. It includes a scheme (`https`) and a host\n(`johns-apparel.myshopify.com`).\n" scalar URL -""" -The measurement used to calculate a unit price for a product variant (e.g. $9.99 / 100ml). -""" +"The measurement used to calculate a unit price for a product variant (e.g. $9.99 / 100ml).\n" type UnitPriceMeasurement { """ The type of unit of measurement for the unit price measurement. @@ -9520,6 +11296,16 @@ type UnitPriceMeasurement { The accepted types of unit of measurement. """ enum UnitPriceMeasurementMeasuredType { + """ + Unit of measurements representing areas. + """ + AREA + + """ + Unit of measurements representing lengths. + """ + LENGTH + """ Unit of measurements representing volumes. """ @@ -9529,46 +11315,21 @@ enum UnitPriceMeasurementMeasuredType { Unit of measurements representing weights. """ WEIGHT - - """ - Unit of measurements representing lengths. - """ - LENGTH - - """ - Unit of measurements representing areas. - """ - AREA } """ The valid units of measurement for a unit price measurement. """ enum UnitPriceMeasurementMeasuredUnit { - """ - 1000 milliliters equals 1 liter. - """ - ML - """ 100 centiliters equals 1 liter. """ CL """ - Metric system unit of volume. + 100 centimeters equals 1 meter. """ - L - - """ - 1 cubic meter equals 1000 liters. - """ - M3 - - """ - 1000 milligrams equals 1 gram. - """ - MG + CM """ Metric system unit of weight. @@ -9581,14 +11342,9 @@ enum UnitPriceMeasurementMeasuredUnit { KG """ - 1000 millimeters equals 1 meter. + Metric system unit of volume. """ - MM - - """ - 100 centimeters equals 1 meter. - """ - CM + L """ Metric system unit of length. @@ -9599,6 +11355,92 @@ enum UnitPriceMeasurementMeasuredUnit { Metric system unit of area. """ M2 + + """ + 1 cubic meter equals 1000 liters. + """ + M3 + + """ + 1000 milligrams equals 1 gram. + """ + MG + + """ + 1000 milliliters equals 1 liter. + """ + ML + + """ + 1000 millimeters equals 1 meter. + """ + MM +} + +""" +Systems of weights and measures. +""" +enum UnitSystem { + """ + Imperial system of weights and measures. + """ + IMPERIAL_SYSTEM + + """ + Metric system of weights and measures. + """ + METRIC_SYSTEM +} + +""" +A redirect on the online store. +""" +type UrlRedirect implements Node { + """ + The ID of the URL redirect. + """ + id: ID! + + """ + The old path to be redirected from. When the user visits this path, they'll be redirected to the target location. + """ + path: String! + + """ + The target location where the user will be redirected to. + """ + target: String! +} + +"An auto-generated type for paginating through multiple UrlRedirects.\n" +type UrlRedirectConnection { + """ + A list of edges. + """ + edges: [UrlRedirectEdge!]! + + """ + A list of the nodes contained in UrlRedirectEdge. + """ + nodes: [UrlRedirect!]! + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +"An auto-generated type which holds one UrlRedirect and a cursor during pagination.\n" +type UrlRedirectEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of UrlRedirectEdge. + """ + node: UrlRedirect! } """ @@ -9606,7 +11448,7 @@ Represents an error in the input of a mutation. """ type UserError implements DisplayableError { """ - Path to the input field which caused the error. + The path to the input field that caused the error. """ field: [String!] @@ -9616,17 +11458,32 @@ type UserError implements DisplayableError { message: String! } +""" +A filter used to view a subset of products in a collection matching a specific variant option. +""" +input VariantOptionFilter { + """ + The name of the variant option to filter on. + """ + name: String! + + """ + The value of the variant option to filter on. + """ + value: String! +} + """ Represents a Shopify hosted video. """ -type Video implements Node & Media { +type Video implements Media & Node { """ A word or phrase to share the nature or contents of a media. """ alt: String """ - Globally unique identifier. + A globally-unique identifier. """ id: ID! @@ -9680,23 +11537,23 @@ type VideoSource { Units of measurement for weight. """ enum WeightUnit { - """ - 1 kilogram equals 1000 grams. - """ - KILOGRAMS - """ Metric system unit of mass. """ GRAMS """ - 1 pound equals 16 ounces. + 1 kilogram equals 1000 grams. """ - POUNDS + KILOGRAMS """ Imperial system unit of mass. """ OUNCES + + """ + 1 pound equals 16 ounces. + """ + POUNDS } diff --git a/packages/shopify/src/api/endpoints/cart.ts b/packages/shopify/src/api/endpoints/cart.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/cart.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/endpoints/catalog/products.ts b/packages/shopify/src/api/endpoints/catalog/products.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/endpoints/catalog/products/get-products.ts b/packages/shopify/src/api/endpoints/catalog/products/get-products.ts new file mode 100644 index 000000000..4f31300ce --- /dev/null +++ b/packages/shopify/src/api/endpoints/catalog/products/get-products.ts @@ -0,0 +1,14 @@ +import { ProductsEndpoint } from '.' + +// Return current cart info +const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ + commerce, +}) => { + const { products } = await commerce.getAllProducts() + + const found = !!products.length + + return { data: { products, found } } +} + +export default getProducts diff --git a/packages/shopify/src/api/endpoints/catalog/products/index.ts b/packages/shopify/src/api/endpoints/catalog/products/index.ts new file mode 100644 index 000000000..0ae4dd66f --- /dev/null +++ b/packages/shopify/src/api/endpoints/catalog/products/index.ts @@ -0,0 +1,20 @@ +import { type GetAPISchema, createEndpoint } from '@vercel/commerce/api' +import type { ProductsSchema } from '@vercel/commerce/types/product' +import type { ShopifyAPI } from '../../..' + +import productsEndpoint from '@vercel/commerce/api/endpoints/catalog/products' + +import getProducts from './get-products' + +export type ProductsAPI = GetAPISchema + +export type ProductsEndpoint = ProductsAPI['endpoint'] + +export const handlers: ProductsEndpoint['handlers'] = { getProducts } + +const productsApi = createEndpoint({ + handler: productsEndpoint, + handlers, +}) + +export default productsApi diff --git a/packages/shopify/src/api/endpoints/checkout/get-checkout.ts b/packages/shopify/src/api/endpoints/checkout/get-checkout.ts index 188915022..bed5c7b3c 100644 --- a/packages/shopify/src/api/endpoints/checkout/get-checkout.ts +++ b/packages/shopify/src/api/endpoints/checkout/get-checkout.ts @@ -8,19 +8,19 @@ import type { CheckoutEndpoint } from '.' const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, - res, config, }) => { const { cookies } = req - const checkoutUrl = cookies[SHOPIFY_CHECKOUT_URL_COOKIE] - const customerCookie = cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE] + const checkoutUrl = cookies.get(SHOPIFY_CHECKOUT_URL_COOKIE)?.value + const customerCookie = cookies.get(SHOPIFY_CUSTOMER_TOKEN_COOKIE)?.value if (customerCookie) { try { await config.fetch(associateCustomerWithCheckoutMutation, { variables: { - checkoutId: cookies[SHOPIFY_CHECKOUT_ID_COOKIE], - customerAccessToken: cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE], + checkoutId: cookies.get(SHOPIFY_CHECKOUT_ID_COOKIE)?.value, + customerAccessToken: cookies.get(SHOPIFY_CUSTOMER_TOKEN_COOKIE) + ?.value, }, }) } catch (error) { @@ -28,11 +28,7 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ } } - if (checkoutUrl) { - res.redirect(checkoutUrl) - } else { - res.redirect('/cart') - } + return { redirectTo: checkoutUrl ?? '/cart' } } export default getCheckout diff --git a/packages/shopify/src/api/endpoints/checkout/index.ts b/packages/shopify/src/api/endpoints/checkout/index.ts index 64020810d..bcccf150c 100644 --- a/packages/shopify/src/api/endpoints/checkout/index.ts +++ b/packages/shopify/src/api/endpoints/checkout/index.ts @@ -1,6 +1,6 @@ import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' import checkoutEndpoint from '@vercel/commerce/api/endpoints/checkout' -import type { CheckoutSchema } from '../../../types/checkout' +import type { CheckoutSchema } from '@vercel/commerce/types/checkout' import type { ShopifyAPI } from '../..' import getCheckout from './get-checkout' diff --git a/packages/shopify/src/api/endpoints/customer/address.ts b/packages/shopify/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/shopify/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/shopify/src/api/endpoints/customer/card.ts b/packages/shopify/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/shopify/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/shopify/src/api/endpoints/customer/index.ts b/packages/shopify/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/shopify/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/shopify/src/api/endpoints/index.ts b/packages/shopify/src/api/endpoints/index.ts new file mode 100644 index 000000000..4f539eac7 --- /dev/null +++ b/packages/shopify/src/api/endpoints/index.ts @@ -0,0 +1,14 @@ +import type { Provider, ShopifyAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' +import checkout from './checkout' +import products from './catalog/products' + +const endpoints = { + checkout, + 'catalog/products': products, +} + +export default function shopifyAPI(commerce: ShopifyAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/shopify/src/api/endpoints/login.ts b/packages/shopify/src/api/endpoints/login.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/login.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/endpoints/logout.ts b/packages/shopify/src/api/endpoints/logout.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/endpoints/signup.ts b/packages/shopify/src/api/endpoints/signup.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/endpoints/wishlist.ts b/packages/shopify/src/api/endpoints/wishlist.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/shopify/src/api/endpoints/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/shopify/src/api/index.ts b/packages/shopify/src/api/index.ts index 7ae6a4206..6412adaca 100644 --- a/packages/shopify/src/api/index.ts +++ b/packages/shopify/src/api/index.ts @@ -13,7 +13,13 @@ import { import fetchGraphqlApi from './utils/fetch-graphql-api' -import * as operations from './operations' +import getAllPages from './operations/get-all-pages' +import getPage from './operations/get-page' +import getAllProducts from './operations/get-all-products' +import getAllProductPaths from './operations/get-all-product-paths' +import getProduct from './operations/get-product' +import getSiteInfo from './operations/get-site-info' +import login from './operations/login' if (!API_URL) { throw new Error( @@ -41,7 +47,15 @@ const config: ShopifyConfig = { export const provider = { config, - operations, + operations: { + login, + getSiteInfo, + getAllPages, + getPage, + getAllProducts, + getAllProductPaths, + getProduct, + }, } export type Provider = typeof provider diff --git a/packages/shopify/src/api/operations/get-all-pages.ts b/packages/shopify/src/api/operations/get-all-pages.ts index 2f6cc0916..55c1d7d69 100644 --- a/packages/shopify/src/api/operations/get-all-pages.ts +++ b/packages/shopify/src/api/operations/get-all-pages.ts @@ -9,7 +9,7 @@ import { } from '../../../schema' import { normalizePages } from '../../utils' import type { ShopifyConfig, Provider } from '..' -import type { GetAllPagesOperation, Page } from '../../types/page' +import type { GetAllPagesOperation, Page } from '@vercel/commerce/types/page' import getAllPagesQuery from '../../utils/queries/get-all-pages-query' export default function getAllPagesOperation({ diff --git a/packages/shopify/src/api/operations/get-all-product-paths.ts b/packages/shopify/src/api/operations/get-all-product-paths.ts index e5a7d2d8e..0155bf6cd 100644 --- a/packages/shopify/src/api/operations/get-all-product-paths.ts +++ b/packages/shopify/src/api/operations/get-all-product-paths.ts @@ -2,7 +2,7 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import { GetAllProductPathsOperation } from '../../types/product' +import { GetAllProductPathsOperation } from '@vercel/commerce/types/product' import { GetAllProductPathsQuery, GetAllProductPathsQueryVariables, diff --git a/packages/shopify/src/api/operations/get-all-products.ts b/packages/shopify/src/api/operations/get-all-products.ts index 003e27204..fcab20128 100644 --- a/packages/shopify/src/api/operations/get-all-products.ts +++ b/packages/shopify/src/api/operations/get-all-products.ts @@ -2,7 +2,7 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import { GetAllProductsOperation } from '../../types/product' +import { GetAllProductsOperation } from '@vercel/commerce/types/product' import { GetAllProductsQuery, GetAllProductsQueryVariables, diff --git a/packages/shopify/src/api/operations/get-page.ts b/packages/shopify/src/api/operations/get-page.ts index 2cea52194..e6ba19ce5 100644 --- a/packages/shopify/src/api/operations/get-page.ts +++ b/packages/shopify/src/api/operations/get-page.ts @@ -9,7 +9,7 @@ import { GetPageQueryVariables, Page as ShopifyPage, } from '../../../schema' -import { GetPageOperation } from '../../types/page' +import { GetPageOperation } from '@vercel/commerce/types/page' import getPageQuery from '../../utils/queries/get-page-query' export default function getPageOperation({ diff --git a/packages/shopify/src/api/operations/get-product.ts b/packages/shopify/src/api/operations/get-product.ts index 1697b0feb..76a3c865f 100644 --- a/packages/shopify/src/api/operations/get-product.ts +++ b/packages/shopify/src/api/operations/get-product.ts @@ -2,7 +2,7 @@ import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import { GetProductOperation } from '../../types/product' +import { GetProductOperation } from '@vercel/commerce/types/product' import { normalizeProduct, getProductQuery } from '../../utils' import type { ShopifyConfig, Provider } from '..' import { diff --git a/packages/shopify/src/api/operations/get-site-info.ts b/packages/shopify/src/api/operations/get-site-info.ts index 6bb6de4b0..f7602025c 100644 --- a/packages/shopify/src/api/operations/get-site-info.ts +++ b/packages/shopify/src/api/operations/get-site-info.ts @@ -4,9 +4,9 @@ import type { } from '@vercel/commerce/api/operations' import { GetSiteInfoQueryVariables } from '../../../schema' import type { ShopifyConfig, Provider } from '..' -import { GetSiteInfoOperation } from '../../types/site' +import { GetSiteInfoOperation } from '@vercel/commerce/types/site' -import { getCategories, getBrands, getSiteInfoQuery } from '../../utils' +import { getCategories, getBrands } from '../../utils' export default function getSiteInfoOperation({ commerce, @@ -24,9 +24,7 @@ export default function getSiteInfoOperation({ ): Promise async function getSiteInfo({ - query = getSiteInfoQuery, config, - variables, }: { query?: string config?: Partial @@ -37,24 +35,15 @@ export default function getSiteInfoOperation({ const categoriesPromise = getCategories(cfg) const brandsPromise = getBrands(cfg) - /* - const { fetch, locale } = cfg - const { data } = await fetch( - query, - { variables }, - { - ...(locale && { - headers: { - 'Accept-Language': locale, - }, - }), - } - ) - */ + + const [categories, brands] = await Promise.all([ + categoriesPromise, + brandsPromise, + ]) return { - categories: await categoriesPromise, - brands: await brandsPromise, + categories, + brands, } } diff --git a/packages/shopify/src/api/operations/index.ts b/packages/shopify/src/api/operations/index.ts deleted file mode 100644 index 7872a20b6..000000000 --- a/packages/shopify/src/api/operations/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { default as getAllPages } from './get-all-pages' -export { default as getPage } from './get-page' -export { default as getAllProducts } from './get-all-products' -export { default as getAllProductPaths } from './get-all-product-paths' -export { default as getProduct } from './get-product' -export { default as getSiteInfo } from './get-site-info' -export { default as login } from './login' diff --git a/packages/shopify/src/api/operations/login.ts b/packages/shopify/src/api/operations/login.ts index 5fad769bd..3f4419a4a 100644 --- a/packages/shopify/src/api/operations/login.ts +++ b/packages/shopify/src/api/operations/login.ts @@ -1,6 +1,5 @@ -import type { ServerResponse } from 'http' import type { OperationContext } from '@vercel/commerce/api/operations' -import type { LoginOperation } from '../../types/login' +import type { LoginOperation } from '@vercel/commerce/types/login' import type { ShopifyConfig, Provider } from '..' import { customerAccessTokenCreateMutation, @@ -19,7 +18,7 @@ export default function loginOperation({ }: { query?: string variables: T['variables'] - res: ServerResponse + res: Response config?: ShopifyConfig }): Promise { config = commerce.getConfig(config) diff --git a/packages/shopify/src/api/utils/fetch-graphql-api.ts b/packages/shopify/src/api/utils/fetch-graphql-api.ts index 1970db572..39d6b3eb0 100644 --- a/packages/shopify/src/api/utils/fetch-graphql-api.ts +++ b/packages/shopify/src/api/utils/fetch-graphql-api.ts @@ -1,5 +1,4 @@ -import type { GraphQLFetcher } from '@vercel/commerce/api' -import fetch from './fetch' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import { API_URL, API_TOKEN } from '../../const' import { getError } from '../../utils/handle-fetch-response' @@ -7,18 +6,18 @@ import { getError } from '../../utils/handle-fetch-response' const fetchGraphqlApi: GraphQLFetcher = async ( query: string, { variables } = {}, - fetchOptions + options?: FetchOptions ) => { try { const res = await fetch(API_URL, { - ...fetchOptions, - method: 'POST', + method: options?.method || 'POST', headers: { 'X-Shopify-Storefront-Access-Token': API_TOKEN!, - ...fetchOptions?.headers, + ...options?.headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ + ...options?.body, query, variables, }), @@ -35,7 +34,7 @@ const fetchGraphqlApi: GraphQLFetcher = async ( throw getError( [ { - message: `${err} \n Most likely related to an unexpected output. e.g the store might be protected with password or not available.`, + message: `${err} \n Most likely related to an unexpected output. E.g: NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN & NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN might be incorect.`, }, ], 500 diff --git a/packages/shopify/src/auth/use-login.tsx b/packages/shopify/src/auth/use-login.tsx index c9d183e33..81ec35636 100644 --- a/packages/shopify/src/auth/use-login.tsx +++ b/packages/shopify/src/auth/use-login.tsx @@ -1,8 +1,8 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' -import useLogin, { UseLogin } from '@vercel/commerce/auth/use-login' -import type { LoginHook } from '../types/login' +import useLogin, { type UseLogin } from '@vercel/commerce/auth/use-login' +import type { LoginHook } from '@vercel/commerce/types/login' import useCustomer from '../customer/use-customer' import { diff --git a/packages/shopify/src/auth/use-logout.tsx b/packages/shopify/src/auth/use-logout.tsx index c37b0fcc9..d43420525 100644 --- a/packages/shopify/src/auth/use-logout.tsx +++ b/packages/shopify/src/auth/use-logout.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import useLogout, { UseLogout } from '@vercel/commerce/auth/use-logout' -import type { LogoutHook } from '../types/logout' +import type { LogoutHook } from '@vercel/commerce/types/logout' import useCustomer from '../customer/use-customer' import customerAccessTokenDeleteMutation from '../utils/mutations/customer-access-token-delete' import { getCustomerToken, setCustomerToken } from '../utils/customer-token' diff --git a/packages/shopify/src/auth/use-signup.tsx b/packages/shopify/src/auth/use-signup.tsx index 8af0fec7d..90a4c443a 100644 --- a/packages/shopify/src/auth/use-signup.tsx +++ b/packages/shopify/src/auth/use-signup.tsx @@ -1,8 +1,8 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' -import useSignup, { UseSignup } from '@vercel/commerce/auth/use-signup' -import type { SignupHook } from '../types/signup' +import useSignup, { type UseSignup } from '@vercel/commerce/auth/use-signup' +import type { SignupHook } from '@vercel/commerce/types/signup' import useCustomer from '../customer/use-customer' import { Mutation, MutationCustomerCreateArgs } from '../../schema' diff --git a/packages/shopify/src/cart/use-add-item.tsx b/packages/shopify/src/cart/use-add-item.tsx index 5460bd726..b485acfa5 100644 --- a/packages/shopify/src/cart/use-add-item.tsx +++ b/packages/shopify/src/cart/use-add-item.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError } from '@vercel/commerce/utils/errors' import useAddItem, { UseAddItem } from '@vercel/commerce/cart/use-add-item' -import type { AddItemHook } from '../types/cart' +import type { AddItemHook } from '@vercel/commerce/types/cart' import useCart from './use-cart' import { diff --git a/packages/shopify/src/cart/use-cart.tsx b/packages/shopify/src/cart/use-cart.tsx index 2fe68beef..2400debb1 100644 --- a/packages/shopify/src/cart/use-cart.tsx +++ b/packages/shopify/src/cart/use-cart.tsx @@ -1,10 +1,11 @@ -import { useMemo } from 'react' -import useCommerceCart, { UseCart } from '@vercel/commerce/cart/use-cart' +import type { SWRHook } from '@vercel/commerce/utils/types' +import type { GetCartHook } from '@vercel/commerce/types/cart' + +import { useMemo } from 'react' +import useCommerceCart, { type UseCart } from '@vercel/commerce/cart/use-cart' -import { SWRHook } from '@vercel/commerce/utils/types' import { checkoutToCart } from '../utils' import getCheckoutQuery from '../utils/queries/get-checkout-query' -import { GetCartHook } from '../types/cart' import Cookies from 'js-cookie' import { diff --git a/packages/shopify/src/cart/use-remove-item.tsx b/packages/shopify/src/cart/use-remove-item.tsx index d04c7c5d2..eefeed135 100644 --- a/packages/shopify/src/cart/use-remove-item.tsx +++ b/packages/shopify/src/cart/use-remove-item.tsx @@ -7,7 +7,11 @@ import { ValidationError } from '@vercel/commerce/utils/errors' import useRemoveItem, { UseRemoveItem, } from '@vercel/commerce/cart/use-remove-item' -import type { Cart, LineItem, RemoveItemHook } from '../types/cart' +import type { + Cart, + LineItem, + RemoveItemHook, +} from '@vercel/commerce/types/cart' import useCart from './use-cart' export type RemoveItemFn = T extends LineItem diff --git a/packages/shopify/src/cart/use-update-item.tsx b/packages/shopify/src/cart/use-update-item.tsx index 0e8258a51..3767c6174 100644 --- a/packages/shopify/src/cart/use-update-item.tsx +++ b/packages/shopify/src/cart/use-update-item.tsx @@ -1,23 +1,26 @@ -import { useCallback } from 'react' -import debounce from 'lodash.debounce' +import type { UpdateItemHook, LineItem } from '@vercel/commerce/types/cart' +import type { + Mutation, + MutationCheckoutLineItemsUpdateArgs, +} from '../../schema' import type { HookFetcherContext, MutationHookContext, } from '@vercel/commerce/utils/types' + +import { useCallback } from 'react' +import debounce from 'lodash.debounce' import { ValidationError } from '@vercel/commerce/utils/errors' import useUpdateItem, { - UseUpdateItem, + type UseUpdateItem, } from '@vercel/commerce/cart/use-update-item' - import useCart from './use-cart' import { handler as removeItemHandler } from './use-remove-item' -import type { UpdateItemHook, LineItem } from '../types/cart' import { getCheckoutId, checkoutLineItemUpdateMutation, checkoutToCart, } from '../utils' -import { Mutation, MutationCheckoutLineItemsUpdateArgs } from '../../schema' export type UpdateItemActionInput = T extends LineItem ? Partial diff --git a/packages/shopify/src/const.ts b/packages/shopify/src/const.ts index a8ee70586..fb15f9708 100644 --- a/packages/shopify/src/const.ts +++ b/packages/shopify/src/const.ts @@ -8,6 +8,6 @@ export const STORE_DOMAIN = process.env.NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN export const SHOPIFY_COOKIE_EXPIRE = 30 -export const API_URL = `https://${STORE_DOMAIN}/api/2021-07/graphql.json` +export const API_URL = `https://${STORE_DOMAIN}/api/2022-07/graphql.json` export const API_TOKEN = process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN diff --git a/packages/shopify/src/customer/use-customer.tsx b/packages/shopify/src/customer/use-customer.tsx index 6fc9a53a7..804d6a877 100644 --- a/packages/shopify/src/customer/use-customer.tsx +++ b/packages/shopify/src/customer/use-customer.tsx @@ -1,10 +1,10 @@ -import useCustomer, { - UseCustomer, -} from '@vercel/commerce/customer/use-customer' -import type { CustomerHook } from '../types/customer' -import { SWRHook } from '@vercel/commerce/utils/types' +import type { SWRHook } from '@vercel/commerce/utils/types' +import type { CustomerHook } from '@vercel/commerce/types/customer' +import type { GetCustomerQuery, GetCustomerQueryVariables } from '../../schema' import { getCustomerQuery, getCustomerToken } from '../utils' -import { GetCustomerQuery, GetCustomerQueryVariables } from '../../schema' +import useCustomer, { + type UseCustomer, +} from '@vercel/commerce/customer/use-customer' export default useCustomer as UseCustomer @@ -14,14 +14,28 @@ export const handler: SWRHook = { }, async fetcher({ options, fetch }) { const customerAccessToken = getCustomerToken() + if (customerAccessToken) { - const data = await fetch({ + const { customer } = await fetch< + GetCustomerQuery, + GetCustomerQueryVariables + >({ ...options, variables: { customerAccessToken: getCustomerToken() }, }) - return data.customer + + if (!customer) { + return null + } + + return { + id: customer.id, + firstName: customer.firstName ?? 'N/A', + lastName: customer.lastName ?? '', + ...(customer.email && { email: customer.email }), + ...(customer.phone && { phone: customer.phone }), + } } - return null }, useHook: ({ useData }) => diff --git a/packages/shopify/src/product/use-search.tsx b/packages/shopify/src/product/use-search.tsx index 582423e9f..6d6b9add5 100644 --- a/packages/shopify/src/product/use-search.tsx +++ b/packages/shopify/src/product/use-search.tsx @@ -16,7 +16,7 @@ import { normalizeProduct, } from '../utils' -import type { SearchProductsHook } from '../types/product' +import type { SearchProductsHook } from '@vercel/commerce/types/product' export type SearchProductsInput = { search?: string diff --git a/packages/shopify/src/types/cart.ts b/packages/shopify/src/types/cart.ts deleted file mode 100644 index 243d369a5..000000000 --- a/packages/shopify/src/types/cart.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as Core from '@vercel/commerce/types/cart' - -export * from '@vercel/commerce/types/cart' - -export type ShopifyCart = {} - -/** - * Extend core cart types - */ - -export type Cart = Core.Cart & { - lineItems: Core.LineItem[] - url?: string -} - -export type CartTypes = Core.CartTypes - -export type CartHooks = Core.CartHooks - -export type GetCartHook = CartHooks['getCart'] -export type AddItemHook = CartHooks['addItem'] -export type UpdateItemHook = CartHooks['updateItem'] -export type RemoveItemHook = CartHooks['removeItem'] - -export type CartSchema = Core.CartSchema - -export type CartHandlers = Core.CartHandlers - -export type GetCartHandler = CartHandlers['getCart'] -export type AddItemHandler = CartHandlers['addItem'] -export type UpdateItemHandler = CartHandlers['updateItem'] -export type RemoveItemHandler = CartHandlers['removeItem'] diff --git a/packages/shopify/src/types/checkout.ts b/packages/shopify/src/types/checkout.ts deleted file mode 100644 index d139db685..000000000 --- a/packages/shopify/src/types/checkout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/checkout' diff --git a/packages/shopify/src/types/common.ts b/packages/shopify/src/types/common.ts deleted file mode 100644 index 23b8daa11..000000000 --- a/packages/shopify/src/types/common.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/common' diff --git a/packages/shopify/src/types/customer.ts b/packages/shopify/src/types/customer.ts deleted file mode 100644 index 6e66366be..000000000 --- a/packages/shopify/src/types/customer.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as Core from '@vercel/commerce/types/customer' - -export * from '@vercel/commerce/types/customer' - -export type CustomerSchema = Core.CustomerSchema diff --git a/packages/shopify/src/types/index.ts b/packages/shopify/src/types/index.ts deleted file mode 100644 index 7ab0b7f64..000000000 --- a/packages/shopify/src/types/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as Cart from './cart' -import * as Checkout from './checkout' -import * as Common from './common' -import * as Customer from './customer' -import * as Login from './login' -import * as Logout from './logout' -import * as Page from './page' -import * as Product from './product' -import * as Signup from './signup' -import * as Site from './site' -import * as Wishlist from './wishlist' - -export type { - Cart, - Checkout, - Common, - Customer, - Login, - Logout, - Page, - Product, - Signup, - Site, - Wishlist, -} diff --git a/packages/shopify/src/types/login.ts b/packages/shopify/src/types/login.ts deleted file mode 100644 index ab99bf8cd..000000000 --- a/packages/shopify/src/types/login.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Core from '@vercel/commerce/types/login' -import type { CustomerAccessTokenCreateInput } from '../../schema' - -export * from '@vercel/commerce/types/login' - -export type LoginOperation = Core.LoginOperation & { - variables: CustomerAccessTokenCreateInput -} diff --git a/packages/shopify/src/types/logout.ts b/packages/shopify/src/types/logout.ts deleted file mode 100644 index 1de06f8dc..000000000 --- a/packages/shopify/src/types/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/logout' diff --git a/packages/shopify/src/types/page.ts b/packages/shopify/src/types/page.ts deleted file mode 100644 index ccbc29f7b..000000000 --- a/packages/shopify/src/types/page.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as Core from '@vercel/commerce/types/page' -export * from '@vercel/commerce/types/page' - -export type Page = Core.Page - -export type PageTypes = { - page: Page -} - -export type GetAllPagesOperation = Core.GetAllPagesOperation -export type GetPageOperation = Core.GetPageOperation diff --git a/packages/shopify/src/types/product.ts b/packages/shopify/src/types/product.ts deleted file mode 100644 index 72ca02f02..000000000 --- a/packages/shopify/src/types/product.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/product' diff --git a/packages/shopify/src/types/signup.ts b/packages/shopify/src/types/signup.ts deleted file mode 100644 index 3f0d1af5a..000000000 --- a/packages/shopify/src/types/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/signup' diff --git a/packages/shopify/src/types/site.ts b/packages/shopify/src/types/site.ts deleted file mode 100644 index 96a2e476e..000000000 --- a/packages/shopify/src/types/site.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/site' diff --git a/packages/shopify/src/types/wishlist.ts b/packages/shopify/src/types/wishlist.ts deleted file mode 100644 index af92d9f63..000000000 --- a/packages/shopify/src/types/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/wishlist' diff --git a/packages/shopify/src/utils/checkout-to-cart.ts b/packages/shopify/src/utils/checkout-to-cart.ts index 97b3f0a21..a487eeee5 100644 --- a/packages/shopify/src/utils/checkout-to-cart.ts +++ b/packages/shopify/src/utils/checkout-to-cart.ts @@ -1,4 +1,4 @@ -import type { Cart } from '../types/cart' +import type { Cart } from '@vercel/commerce/types/cart' import { CommerceError } from '@vercel/commerce/utils/errors' import { diff --git a/packages/shopify/src/utils/get-brands.ts b/packages/shopify/src/utils/get-brands.ts index eb87b519d..c8333458f 100644 --- a/packages/shopify/src/utils/get-brands.ts +++ b/packages/shopify/src/utils/get-brands.ts @@ -5,19 +5,7 @@ import { import { ShopifyConfig } from '../api' import getAllProductVendors from './queries/get-all-product-vendors-query' -export type Brand = { - entityId: string - name: string - path: string -} - -export type BrandEdge = { - node: Brand -} - -export type Brands = BrandEdge[] - -const getBrands = async (config: ShopifyConfig): Promise => { +const getBrands = async (config: ShopifyConfig) => { const { data } = await config.fetch< GetAllProductVendorsQuery, GetAllProductVendorsQueryVariables @@ -32,11 +20,10 @@ const getBrands = async (config: ShopifyConfig): Promise => { return [...new Set(vendorsStrings)].map((v) => { const id = v.replace(/\s+/g, '-').toLowerCase() return { - node: { - entityId: id, - name: v, - path: `brands/${id}`, - }, + id, + name: v, + slug: id, + path: `/${id}`, } }) } diff --git a/packages/shopify/src/utils/get-categories.ts b/packages/shopify/src/utils/get-categories.ts index e5ca16dad..2bae3c3b5 100644 --- a/packages/shopify/src/utils/get-categories.ts +++ b/packages/shopify/src/utils/get-categories.ts @@ -1,6 +1,6 @@ -import type { Category } from '../types/site' -import { ShopifyConfig } from '../api' -import { CollectionEdge } from '../../schema' +import type { Category } from '@vercel/commerce/types/site' +import type { ShopifyConfig } from '../api' +import type { CollectionEdge } from '../../schema' import { normalizeCategory } from './normalize' import getSiteCollectionsQuery from './queries/get-all-collections-query' diff --git a/packages/shopify/src/utils/get-search-variables.ts b/packages/shopify/src/utils/get-search-variables.ts index f4863650d..26c7d3faa 100644 --- a/packages/shopify/src/utils/get-search-variables.ts +++ b/packages/shopify/src/utils/get-search-variables.ts @@ -1,5 +1,5 @@ import getSortVariables from './get-sort-variables' -import { SearchProductsBody } from '../types/product' +import { SearchProductsBody } from '@vercel/commerce/types/product' export const getSearchVariables = ({ brandId, @@ -11,7 +11,7 @@ export const getSearchVariables = ({ let query = '' if (search) { - query += `product_type:${search} OR title:${search} OR tag:${search} ` + query += `(product_type:${search}) OR (title:${search}) OR (tag:${search}) ` } if (brandId) { diff --git a/packages/shopify/src/utils/normalize.ts b/packages/shopify/src/utils/normalize.ts index 2782f59dd..066daff33 100644 --- a/packages/shopify/src/utils/normalize.ts +++ b/packages/shopify/src/utils/normalize.ts @@ -1,9 +1,9 @@ -import type { Page } from '../types/page' -import type { Product } from '../types/product' -import type { Cart, LineItem } from '../types/cart' -import type { Category } from '../types/site' +import type { Page } from '@vercel/commerce/types/page' +import type { Product } from '@vercel/commerce/types/product' +import type { Cart, LineItem } from '@vercel/commerce/types/cart' +import type { Category } from '@vercel/commerce/types/site' -import { +import type { Product as ShopifyProduct, Checkout, CheckoutLineItemEdge, @@ -16,6 +16,7 @@ import { PageEdge, Collection, } from '../../schema' + import { colorMap } from './colors' const money = ({ amount, currencyCode }: MoneyV2) => { @@ -53,7 +54,7 @@ const normalizeProductOption = ({ } const normalizeProductImages = ({ edges }: ImageConnection) => - edges?.map(({ node: { originalSrc: url, ...rest } }) => ({ + edges?.map(({ node: { url, ...rest } }) => ({ url, ...rest, })) @@ -75,7 +76,7 @@ const normalizeProductVariants = ({ edges }: ProductVariantConnection) => { return { id, name: title, - sku: sku ?? id, + sku, price: +priceV2.amount, listPrice: +compareAtPriceV2?.amount, requiresShipping, @@ -122,7 +123,7 @@ export function normalizeProduct({ .filter((o) => o.name !== 'Title') // By default Shopify adds a 'Title' name when there's only one option. We don't need it. https://community.shopify.com/c/Shopify-APIs-SDKs/Adding-new-product-variant-is-automatically-adding-quot-Default/td-p/358095 .map((o) => normalizeProductOption(o)) : [], - ...(description && { description }), + description: description || '', ...(descriptionHtml && { descriptionHtml }), ...rest, } @@ -161,7 +162,7 @@ function normalizeLineItem({ sku: variant?.sku ?? '', name: variant?.title!, image: { - url: variant?.image?.originalSrc || '/product-img-placeholder.svg', + url: variant?.image?.url || '/product-img-placeholder.svg', }, requiresShipping: variant?.requiresShipping ?? false, price: variant?.priceV2?.amount, @@ -180,6 +181,7 @@ export const normalizePage = ( ...page, url: `/${locale}/${handle}`, name, + body: page.body ?? '', }) export const normalizePages = (edges: PageEdge[], locale?: string): Page[] => diff --git a/packages/shopify/src/utils/queries/get-all-products-query.ts b/packages/shopify/src/utils/queries/get-all-products-query.ts index 179cf9812..ff47df74f 100644 --- a/packages/shopify/src/utils/queries/get-all-products-query.ts +++ b/packages/shopify/src/utils/queries/get-all-products-query.ts @@ -23,7 +23,7 @@ export const productConnectionFragment = /* GraphQL */ ` } edges { node { - originalSrc + url altText width height diff --git a/packages/shopify/src/utils/queries/get-checkout-query.ts b/packages/shopify/src/utils/queries/get-checkout-query.ts index 9969e67c0..31c25bb6a 100644 --- a/packages/shopify/src/utils/queries/get-checkout-query.ts +++ b/packages/shopify/src/utils/queries/get-checkout-query.ts @@ -35,7 +35,7 @@ export const checkoutDetailsFragment = /* GraphQL */ ` value } image { - originalSrc + url altText width height diff --git a/packages/shopify/src/utils/queries/get-product-query.ts b/packages/shopify/src/utils/queries/get-product-query.ts index b2998a40a..1c4458432 100644 --- a/packages/shopify/src/utils/queries/get-product-query.ts +++ b/packages/shopify/src/utils/queries/get-product-query.ts @@ -58,7 +58,7 @@ const getProductQuery = /* GraphQL */ ` } edges { node { - originalSrc + url altText width height diff --git a/packages/spree/package.json b/packages/spree/package.json index 491a12df9..e396d8f7f 100644 --- a/packages/spree/package.json +++ b/packages/spree/package.json @@ -48,31 +48,33 @@ }, "dependencies": { "@spree/storefront-api-v2-sdk": "^5.1.1", - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", - "swr": "^1.2.0", - "lodash.debounce": "^4.0.8" + "@vercel/commerce": "workspace:*", + "js-cookie": "^3.0.1", + "lodash.debounce": "^4.0.8", + "swr": "^1.3.0" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", + "@types/js-cookie": "^3.0.2", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "^2.6.2", + "@types/react": "^18.0.14", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/spree/src/api/endpoints/cart/index.ts b/packages/spree/src/api/endpoints/cart/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/catalog/index.ts b/packages/spree/src/api/endpoints/catalog/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/catalog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/catalog/products.ts b/packages/spree/src/api/endpoints/catalog/products.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/checkout/get-checkout.ts b/packages/spree/src/api/endpoints/checkout/get-checkout.ts index 985239678..a99c774ab 100644 --- a/packages/spree/src/api/endpoints/checkout/get-checkout.ts +++ b/packages/spree/src/api/endpoints/checkout/get-checkout.ts @@ -2,11 +2,9 @@ import type { CheckoutEndpoint } from '.' const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req: _request, - res: response, config: _config, }) => { - try { - const html = ` + const html = ` @@ -28,17 +26,11 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ ` - response.status(200) - response.setHeader('Content-Type', 'text/html') - response.write(html) - response.end() - } catch (error) { - console.error(error) - - const message = 'An unexpected error ocurred' - - response.status(500).json({ data: null, errors: [{ message }] }) - } + return new Response(html, { + headers: { + 'content-type': 'text/html', + }, + }) } export default getCheckout diff --git a/packages/spree/src/api/endpoints/customer/address.ts b/packages/spree/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/customer/card.ts b/packages/spree/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/customer/index.ts b/packages/spree/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/index.ts b/packages/spree/src/api/endpoints/index.ts new file mode 100644 index 000000000..6595f7dcc --- /dev/null +++ b/packages/spree/src/api/endpoints/index.ts @@ -0,0 +1,11 @@ +import type { SpreeApiProvider, SpreeApi } from '..' +import createEndpoints from '@vercel/commerce/api/endpoints' +import checkout from './checkout' + +const endpoints = { + checkout, +} + +export default function spreeAPI(commerce: SpreeApi) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/spree/src/api/endpoints/login/index.ts b/packages/spree/src/api/endpoints/login/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/logout/index.ts b/packages/spree/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/signup/index.ts b/packages/spree/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/endpoints/wishlist/index.tsx b/packages/spree/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/spree/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/spree/src/api/operations/get-site-info.ts b/packages/spree/src/api/operations/get-site-info.ts index 13b11e4a4..a389a666d 100644 --- a/packages/spree/src/api/operations/get-site-info.ts +++ b/packages/spree/src/api/operations/get-site-info.ts @@ -111,7 +111,7 @@ export default function getSiteInfoOperation({ id: spreeTaxon.id, name: spreeTaxon.attributes.name, slug: spreeTaxon.id, - path: spreeTaxon.id, + path: `/${spreeTaxon.id}`, } }) @@ -120,11 +120,10 @@ export default function getSiteInfoOperation({ .sort(taxonsSort) .map((spreeTaxon: TaxonAttr) => { return { - node: { - entityId: spreeTaxon.id, - path: `brands/${spreeTaxon.id}`, - name: spreeTaxon.attributes.name, - }, + id: spreeTaxon.id, + path: `/${spreeTaxon.id}`, + slug: spreeTaxon.id, + name: spreeTaxon.attributes.name, } }) diff --git a/packages/spree/src/api/utils/create-api-fetch.ts b/packages/spree/src/api/utils/create-api-fetch.ts index b26a2fb11..5e29cf0b7 100644 --- a/packages/spree/src/api/utils/create-api-fetch.ts +++ b/packages/spree/src/api/utils/create-api-fetch.ts @@ -9,7 +9,6 @@ import { GraphQLFetcher, GraphQLFetcherResult } from '@vercel/commerce/api' import createCustomizedFetchFetcher, { fetchResponseKey, } from '../../utils/create-customized-fetch-fetcher' -import fetch, { Request } from 'node-fetch' import type { SpreeSdkResponseWithRawResponse } from '../../types' import prettyPrintSpreeSdkErrors from '../../utils/pretty-print-spree-sdk-errors' diff --git a/packages/spree/src/index.tsx b/packages/spree/src/index.tsx index 9291e2b16..6cae19234 100644 --- a/packages/spree/src/index.tsx +++ b/packages/spree/src/index.tsx @@ -1,4 +1,4 @@ -import type { ComponentType, FunctionComponent } from 'react' +import type { FC, ReactNode } from 'react' import { Provider, CommerceProviderProps, @@ -14,7 +14,9 @@ import useLogout from '@vercel/commerce/auth/use-logout' export { spreeProvider } export type { SpreeProvider } -export const WithTokenErrorsHandling: FunctionComponent = ({ children }) => { +export const WithTokenErrorsHandling: FC<{ children?: ReactNode }> = ({ + children, +}) => { const logout = useLogout() return ( diff --git a/packages/spree/src/types/index.ts b/packages/spree/src/types/index.ts index 74ddeb52a..d9bd9bd77 100644 --- a/packages/spree/src/types/index.ts +++ b/packages/spree/src/types/index.ts @@ -5,13 +5,11 @@ import type { JsonApiSingleResponse, } from '@spree/storefront-api-v2-sdk/types/interfaces/JsonApi' import type { ResultResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/ResultResponse' -import type { Response } from '@vercel/fetch' -import type { ProductOption, Product } from '@vercel/commerce/types/product' +import type { ProductOption } from '@vercel/commerce/types/product' import type { - AddItemHook, - RemoveItemHook, - WishlistItemBody, - WishlistTypes, + Wishlist as CoreWishlist, + WishlistItemBody as CoreWishlistItemBody, + RemoveItemHook as CoreRemoveItemHook, } from '@vercel/commerce/types/wishlist' export type UnknownObjectValues = Record @@ -134,31 +132,22 @@ export type UserOAuthTokens = { accessToken: string } -// TODO: ExplicitCommerceWishlist is a temporary type -// derived from tsx views. It will be removed once -// Wishlist in @vercel/commerce/types/wishlist is updated -// to a more specific type than `any`. -export type ExplicitCommerceWishlist = { - id: string +export interface Wishlist extends CoreWishlist { token: string - items: { - id: string - product_id: number - variant_id: number - product: Product - }[] } -export type ExplicitWishlistAddItemHook = AddItemHook< - WishlistTypes & { - wishlist: ExplicitCommerceWishlist - itemBody: WishlistItemBody & { - wishlistToken?: string - } - } -> - -export type ExplicitWishlistRemoveItemHook = RemoveItemHook & { - fetcherInput: { wishlistToken?: string } - body: { wishlistToken?: string } +export interface WishlistItemBody extends CoreWishlistItemBody { + wishlistToken: string +} + +export type AddItemHook = { + data: Wishlist | null | undefined + body: { item: WishlistItemBody } + fetcherInput: { item: WishlistItemBody } + actionInput: WishlistItemBody +} + +export type RemoveItemHook = CoreRemoveItemHook & { + fetcherInput: { itemId: string; wishlistToken?: string } + body: { temId: string; wishlistToken?: string } } diff --git a/packages/spree/src/utils/get-media-gallery.ts b/packages/spree/src/utils/get-media-gallery.ts index dd2dacb29..32f73540f 100644 --- a/packages/spree/src/utils/get-media-gallery.ts +++ b/packages/spree/src/utils/get-media-gallery.ts @@ -1,6 +1,6 @@ // Based on https://github.com/spark-solutions/spree2vuestorefront/blob/d88d85ae1bcd2ec99b13b81cd2e3c25600a0216e/src/utils/index.ts -import type { ProductImage } from '@vercel/commerce/types/product' +import type { Image } from '@vercel/commerce/types/common' import type { SpreeProductImage } from '../types' const getMediaGallery = ( @@ -11,7 +11,7 @@ const getMediaGallery = ( minHeight: number ) => string | null ) => { - return images.reduce((productImages, _, imageIndex) => { + return images.reduce((productImages, _, imageIndex) => { const url = getImageUrl(images[imageIndex], 800, 800) if (url) { diff --git a/packages/spree/src/utils/normalizations/normalize-cart.ts b/packages/spree/src/utils/normalizations/normalize-cart.ts index c5597fd89..a8c0bce98 100644 --- a/packages/spree/src/utils/normalizations/normalize-cart.ts +++ b/packages/spree/src/utils/normalizations/normalize-cart.ts @@ -88,7 +88,6 @@ const normalizeVariant = ( price: parseFloat(spreeVariant.attributes.price), listPrice: parseFloat(spreeVariant.attributes.price), image, - isInStock: spreeVariant.attributes.in_stock, availableForSale: spreeVariant.attributes.purchasable, ...(spreeVariant.attributes.weight === '0.0' ? {} diff --git a/packages/spree/src/utils/normalizations/normalize-page.ts b/packages/spree/src/utils/normalizations/normalize-page.ts index a2464ffd9..0d92a4a4d 100644 --- a/packages/spree/src/utils/normalizations/normalize-page.ts +++ b/packages/spree/src/utils/normalizations/normalize-page.ts @@ -35,7 +35,7 @@ const normalizePage = ( id: spreePage.id, name: spreePage.attributes.title, url: `/${usedCommerceLocale}/${spreePage.attributes.slug}`, - body: spreePage.attributes.content, + body: spreePage.attributes.content ?? '', } } diff --git a/packages/spree/src/utils/normalizations/normalize-product.ts b/packages/spree/src/utils/normalizations/normalize-product.ts index 6965f0197..f45e85895 100644 --- a/packages/spree/src/utils/normalizations/normalize-product.ts +++ b/packages/spree/src/utils/normalizations/normalize-product.ts @@ -1,9 +1,9 @@ import type { Product, - ProductImage, ProductPrice, ProductVariant, } from '@vercel/commerce/types/product' +import type { Image } from '@vercel/commerce/types/common' import type { ProductAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' import type { RelationType } from '@spree/storefront-api-v2-sdk/types/interfaces/Relationships' import { jsonApi } from '@spree/storefront-api-v2-sdk' @@ -105,6 +105,7 @@ const normalizeProduct = ( return { id: spreeVariantRecord.id, + sku: spreeVariantRecord.attributes.sku || spreeVariantRecord.id, options: variantOptions, } } @@ -213,7 +214,7 @@ const normalizeProduct = ( createGetAbsoluteImageUrl(requireConfigValue('imageHost') as string) ) - const images: ProductImage[] = + const images: Image[] = productImages.length === 0 ? placeholderImage === false ? [] diff --git a/packages/spree/src/utils/normalizations/normalize-user.ts b/packages/spree/src/utils/normalizations/normalize-user.ts index 8b738fbaf..0bc94d995 100644 --- a/packages/spree/src/utils/normalizations/normalize-user.ts +++ b/packages/spree/src/utils/normalizations/normalize-user.ts @@ -6,10 +6,11 @@ const normalizeUser = ( _spreeSuccessResponse: SpreeSdkResponse, spreeUser: AccountAttr ): Customer => { - const email = spreeUser.attributes.email - return { - email, + id: spreeUser.id, + email: spreeUser.attributes.email, + firstName: spreeUser.attributes.firstname, + lastName: spreeUser.attributes.lastname, } } diff --git a/packages/spree/src/utils/normalizations/normalize-wishlist.ts b/packages/spree/src/utils/normalizations/normalize-wishlist.ts index c9cfee2db..4910b4765 100644 --- a/packages/spree/src/utils/normalizations/normalize-wishlist.ts +++ b/packages/spree/src/utils/normalizations/normalize-wishlist.ts @@ -4,59 +4,54 @@ import { jsonApi } from '@spree/storefront-api-v2-sdk' import type { ProductAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' import type { WishedItemAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/WishedItem' import type { WishlistAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Wishlist' -import type { - ExplicitCommerceWishlist, - SpreeSdkResponse, - VariantAttr, -} from '../../types' +import type { SpreeSdkResponse, VariantAttr } from '../../types' import normalizeProduct from './normalize-product' +import { Wishlist } from '@vercel/commerce/types/wishlist' const normalizeWishlist = ( spreeSuccessResponse: SpreeSdkResponse, spreeWishlist: WishlistAttr -): ExplicitCommerceWishlist => { +): Wishlist => { const spreeWishedItems = jsonApi.findRelationshipDocuments( spreeSuccessResponse, spreeWishlist, 'wished_items' ) - const items: ExplicitCommerceWishlist['items'] = spreeWishedItems.map( - (spreeWishedItem) => { - const spreeWishedVariant = - jsonApi.findSingleRelationshipDocument( - spreeSuccessResponse, - spreeWishedItem, - 'variant' - ) + const items: Wishlist['items'] = spreeWishedItems.map((spreeWishedItem) => { + const spreeWishedVariant = + jsonApi.findSingleRelationshipDocument( + spreeSuccessResponse, + spreeWishedItem, + 'variant' + ) - if (spreeWishedVariant === null) { - throw new MissingVariantError( - `Couldn't find variant for wished item with id ${spreeWishedItem.id}.` - ) - } - - const spreeWishedProduct = - jsonApi.findSingleRelationshipDocument( - spreeSuccessResponse, - spreeWishedVariant, - 'product' - ) - - if (spreeWishedProduct === null) { - throw new MissingProductError( - `Couldn't find product for variant with id ${spreeWishedVariant.id}.` - ) - } - - return { - id: spreeWishedItem.id, - product_id: parseInt(spreeWishedProduct.id, 10), - variant_id: parseInt(spreeWishedVariant.id, 10), - product: normalizeProduct(spreeSuccessResponse, spreeWishedProduct), - } + if (spreeWishedVariant === null) { + throw new MissingVariantError( + `Couldn't find variant for wished item with id ${spreeWishedItem.id}.` + ) } - ) + + const spreeWishedProduct = + jsonApi.findSingleRelationshipDocument( + spreeSuccessResponse, + spreeWishedVariant, + 'product' + ) + + if (spreeWishedProduct === null) { + throw new MissingProductError( + `Couldn't find product for variant with id ${spreeWishedVariant.id}.` + ) + } + + return { + id: spreeWishedItem.id, + productId: spreeWishedProduct.id, + variantId: spreeWishedVariant.id, + product: normalizeProduct(spreeSuccessResponse, spreeWishedProduct), + } + }) return { id: spreeWishlist.id, diff --git a/packages/spree/src/utils/require-config.ts b/packages/spree/src/utils/require-config.ts index 92b7916ca..34bd2dd96 100644 --- a/packages/spree/src/utils/require-config.ts +++ b/packages/spree/src/utils/require-config.ts @@ -6,7 +6,7 @@ const requireConfig = (isomorphicConfig: T, key: keyof T) => { if (typeof valueUnderKey === 'undefined') { throw new MissingConfigurationValueError( - `Value for configuration key ${key} was undefined.` + `Value for configuration key ${key.toString()} was undefined.` ) } diff --git a/packages/spree/src/wishlist/use-add-item.tsx b/packages/spree/src/wishlist/use-add-item.tsx index 010a71e7d..b806ac0fe 100644 --- a/packages/spree/src/wishlist/use-add-item.tsx +++ b/packages/spree/src/wishlist/use-add-item.tsx @@ -2,8 +2,9 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import useAddItem from '@vercel/commerce/wishlist/use-add-item' import type { UseAddItem } from '@vercel/commerce/wishlist/use-add-item' +import type { AddItemHook } from '@vercel/commerce/types/wishlist' import useWishlist from './use-wishlist' -import type { ExplicitWishlistAddItemHook } from '../types' + import type { WishedItem, WishlistsAddWishedItem, @@ -11,12 +12,12 @@ import type { import type { GraphQLFetcherResult } from '@vercel/commerce/api' import ensureIToken from '../utils/tokens/ensure-itoken' import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' -import type { AddItemHook } from '@vercel/commerce/types/wishlist' + import isLoggedIn from '../utils/tokens/is-logged-in' export default useAddItem as UseAddItem -export const handler: MutationHook = { +export const handler: MutationHook = { fetchOptions: { url: 'wishlists', query: 'addWishedItem', @@ -31,7 +32,7 @@ export const handler: MutationHook = { ) const { - item: { productId, variantId, wishlistToken }, + item: { variantId, wishlistToken }, } = input if (!isLoggedIn() || !wishlistToken) { diff --git a/packages/spree/src/wishlist/use-remove-item.tsx b/packages/spree/src/wishlist/use-remove-item.tsx index d8481f5a3..6273ef428 100644 --- a/packages/spree/src/wishlist/use-remove-item.tsx +++ b/packages/spree/src/wishlist/use-remove-item.tsx @@ -2,8 +2,8 @@ import { useCallback } from 'react' import type { MutationHook } from '@vercel/commerce/utils/types' import useRemoveItem from '@vercel/commerce/wishlist/use-remove-item' import type { UseRemoveItem } from '@vercel/commerce/wishlist/use-remove-item' +import type { RemoveItemHook } from '@vercel/commerce/types/wishlist' import useWishlist from './use-wishlist' -import type { ExplicitWishlistRemoveItemHook } from '../types' import isLoggedIn from '../utils/tokens/is-logged-in' import ensureIToken from '../utils/tokens/ensure-itoken' import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' @@ -12,7 +12,7 @@ import type { WishedItem } from '@spree/storefront-api-v2-sdk/types/interfaces/W export default useRemoveItem as UseRemoveItem -export const handler: MutationHook = { +export const handler: MutationHook = { fetchOptions: { url: 'wishlists', query: 'removeWishedItem', @@ -45,7 +45,7 @@ export const handler: MutationHook = { }, useHook: ({ fetch }) => { const useWrappedHook: ReturnType< - MutationHook['useHook'] + MutationHook['useHook'] > = () => { const wishlist = useWishlist() diff --git a/packages/spree/src/wishlist/use-wishlist.tsx b/packages/spree/src/wishlist/use-wishlist.tsx index 9f258625e..dfd264aad 100644 --- a/packages/spree/src/wishlist/use-wishlist.tsx +++ b/packages/spree/src/wishlist/use-wishlist.tsx @@ -9,6 +9,7 @@ import type { Wishlist } from '@spree/storefront-api-v2-sdk/types/interfaces/Wis import ensureIToken from '../utils/tokens/ensure-itoken' import normalizeWishlist from '../utils/normalizations/normalize-wishlist' import isLoggedIn from '../utils/tokens/is-logged-in' +import { ValidationError } from '@vercel/commerce/utils/errors' export default useWishlist as UseWishlist @@ -28,7 +29,9 @@ export const handler: SWRHook = { ) if (!isLoggedIn()) { - return null + throw new ValidationError({ + message: 'Not logged in', + }) } // TODO: Optimize with includeProducts. diff --git a/packages/swell/package.json b/packages/swell/package.json index 27a179882..9f79e46b1 100644 --- a/packages/swell/package.json +++ b/packages/swell/package.json @@ -48,31 +48,33 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1", - "swell-js": "^4.0.0-next.0", - "lodash.debounce": "^4.0.8" + "@vercel/commerce": "workspace:*", + "js-cookie": "^3.0.1", + "lodash.debounce": "^4.0.8", + "swell-js": "^4.0.0-next.0" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { "@taskr/clear": "^1.1.0", "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", + "@types/js-cookie": "^3.0.2", "@types/lodash.debounce": "^4.0.6", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node-fetch": "^2.6.2", + "@types/react": "^18.0.14", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/swell/src/api/cart/index.ts b/packages/swell/src/api/cart/index.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/catalog/index.ts b/packages/swell/src/api/catalog/index.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/catalog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/catalog/products.ts b/packages/swell/src/api/catalog/products.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/customers/index.ts b/packages/swell/src/api/customers/index.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/customers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/customers/logout.ts b/packages/swell/src/api/customers/logout.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/customers/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/customers/signup.ts b/packages/swell/src/api/customers/signup.ts deleted file mode 100644 index ea9b101e1..000000000 --- a/packages/swell/src/api/customers/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/swell/src/api/endpoints/cart.ts b/packages/swell/src/api/endpoints/cart.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/cart.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/endpoints/catalog/products.ts b/packages/swell/src/api/endpoints/catalog/products.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/endpoints/checkout/index.ts b/packages/swell/src/api/endpoints/checkout/index.ts index 2695ea385..6ae546a25 100644 --- a/packages/swell/src/api/endpoints/checkout/index.ts +++ b/packages/swell/src/api/endpoints/checkout/index.ts @@ -5,16 +5,14 @@ import checkoutEndpoint from '@vercel/commerce/api/endpoints/checkout' const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ req, - res, - config, }) => { const { cookies } = req - const checkoutUrl = cookies[SWELL_CHECKOUT_URL_COOKIE] + const checkoutUrl = cookies.get(SWELL_CHECKOUT_URL_COOKIE)?.value if (checkoutUrl) { - res.redirect(checkoutUrl) + return { redirectTo: checkoutUrl } } else { - res.redirect('/cart') + return { redirectTo: '/cart' } } } export const handlers: CheckoutEndpoint['handlers'] = { getCheckout } diff --git a/packages/swell/src/api/endpoints/customer/address.ts b/packages/swell/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/swell/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/swell/src/api/endpoints/customer/card.ts b/packages/swell/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/swell/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/swell/src/api/endpoints/customer/index.ts b/packages/swell/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/swell/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/swell/src/api/endpoints/index.ts b/packages/swell/src/api/endpoints/index.ts new file mode 100644 index 000000000..1fc419bcd --- /dev/null +++ b/packages/swell/src/api/endpoints/index.ts @@ -0,0 +1,12 @@ +import type { Provider, SwellAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' +import checkout from './checkout' + +const endpoints = { + checkout, +} + +export default function handler(commerce: SwellAPI) { + return createEndpoints(commerce, endpoints) +} diff --git a/packages/swell/src/api/endpoints/login.ts b/packages/swell/src/api/endpoints/login.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/login.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/endpoints/logout.ts b/packages/swell/src/api/endpoints/logout.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/endpoints/signup.ts b/packages/swell/src/api/endpoints/signup.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/endpoints/wishlist.ts b/packages/swell/src/api/endpoints/wishlist.ts deleted file mode 100644 index d09c976c3..000000000 --- a/packages/swell/src/api/endpoints/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export default function (_commerce: any) {} diff --git a/packages/swell/src/api/index.ts b/packages/swell/src/api/index.ts index 589acae4e..5cdbbaaf3 100644 --- a/packages/swell/src/api/index.ts +++ b/packages/swell/src/api/index.ts @@ -46,6 +46,8 @@ export const provider = { config, operations } export type Provider = typeof provider +export type SwellAPI

= CommerceAPI

+ export function getCommerceApi

( customProvider: P = provider as any ): CommerceAPI

{ diff --git a/packages/swell/src/api/operations/get-all-pages.ts b/packages/swell/src/api/operations/get-all-pages.ts index 7097d6859..13ae77b83 100644 --- a/packages/swell/src/api/operations/get-all-pages.ts +++ b/packages/swell/src/api/operations/get-all-pages.ts @@ -1,6 +1,6 @@ -import { Provider, SwellConfig } from '..' +import type { Provider, SwellConfig } from '..' import type { OperationContext } from '@vercel/commerce/api/operations' -import type { Page } from '../../types/page' +import type { Page } from '@vercel/commerce/types/page' export type GetAllPagesResult = T @@ -31,10 +31,13 @@ export default function getAllPagesOperation({ const { locale, fetch } = config const data = await fetch('content', 'list', ['pages']) const pages = - data?.results?.map(({ slug, ...rest }: { slug: string }) => ({ - url: `/${locale}/${slug}`, - ...rest, - })) ?? [] + data?.results?.map( + ({ slug, body, ...rest }: { slug: string; body: string }) => ({ + ...rest, + url: `/${locale}/${slug}`, + body: body ?? '', + }) + ) ?? [] return { pages, } diff --git a/packages/swell/src/api/operations/get-page.ts b/packages/swell/src/api/operations/get-page.ts index 7e71f7575..5fc4d282e 100644 --- a/packages/swell/src/api/operations/get-page.ts +++ b/packages/swell/src/api/operations/get-page.ts @@ -1,10 +1,10 @@ -import { Page } from '../../../schema' -import { SwellConfig, Provider } from '..' -import { +import type { Page } from '../../../schema' +import type { SwellConfig, Provider } from '..' +import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import { GetPageOperation } from '../../types/page' +import type { GetPageOperation } from '@vercel/commerce/types/page' export type GetPageResult = T @@ -48,6 +48,7 @@ export default function getPageOperation({ ? { ...page, url: `/${locale}/${page.slug}`, + body: page.body ?? '', } : null, } diff --git a/packages/swell/src/api/operations/get-site-info.ts b/packages/swell/src/api/operations/get-site-info.ts index 88386ad3e..44f8d200c 100644 --- a/packages/swell/src/api/operations/get-site-info.ts +++ b/packages/swell/src/api/operations/get-site-info.ts @@ -1,13 +1,13 @@ import getCategories from '../../utils/get-categories' -import getVendors, { Brands } from '../../utils/get-vendors' +import getVendors from '../../utils/get-vendors' import { Provider, SwellConfig } from '../' import type { OperationContext } from '@vercel/commerce/api/operations' -import type { Category } from '@vercel/commerce/types/site' +import type { Brand, Category } from '@vercel/commerce/types/site' export type GetSiteInfoResult< T extends { categories: any[]; brands: any[] } = { categories: Category[] - brands: Brands + brands: Brand[] } > = T diff --git a/packages/swell/src/api/operations/login.ts b/packages/swell/src/api/operations/login.ts index 44ff37a53..60508073c 100644 --- a/packages/swell/src/api/operations/login.ts +++ b/packages/swell/src/api/operations/login.ts @@ -1,9 +1,9 @@ -import type { ServerResponse } from 'http' import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' -import type { LoginOperation } from '../../types/login' +import type { LoginOperation } from '@vercel/commerce/types/login' + import { Provider, SwellConfig } from '..' export default function loginOperation({ @@ -12,14 +12,14 @@ export default function loginOperation({ async function login(opts: { variables: T['variables'] config?: Partial - res: ServerResponse + res: Response }): Promise async function login( opts: { variables: T['variables'] config?: Partial - res: ServerResponse + res: Response } & OperationOptions ): Promise @@ -30,7 +30,7 @@ export default function loginOperation({ }: { query?: string variables: T['variables'] - res: ServerResponse + res: Response config?: Partial }): Promise { const config = commerce.getConfig(cfg) diff --git a/packages/swell/src/api/utils/fetch.ts b/packages/swell/src/api/utils/fetch.ts deleted file mode 100644 index 0b8367102..000000000 --- a/packages/swell/src/api/utils/fetch.ts +++ /dev/null @@ -1,2 +0,0 @@ -import zeitFetch from '@vercel/fetch' -export default zeitFetch() diff --git a/packages/swell/src/api/utils/is-allowed-method.ts b/packages/swell/src/api/utils/is-allowed-method.ts deleted file mode 100644 index 78bbba568..000000000 --- a/packages/swell/src/api/utils/is-allowed-method.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next' - -export default function isAllowedMethod( - req: NextApiRequest, - res: NextApiResponse, - allowedMethods: string[] -) { - const methods = allowedMethods.includes('OPTIONS') - ? allowedMethods - : [...allowedMethods, 'OPTIONS'] - - if (!req.method || !methods.includes(req.method)) { - res.status(405) - res.setHeader('Allow', methods.join(', ')) - res.end() - return false - } - - if (req.method === 'OPTIONS') { - res.status(200) - res.setHeader('Allow', methods.join(', ')) - res.setHeader('Content-Length', '0') - res.end() - return false - } - - return true -} diff --git a/packages/swell/src/auth/use-login.tsx b/packages/swell/src/auth/use-login.tsx index b3fe9f52d..ea7110aca 100644 --- a/packages/swell/src/auth/use-login.tsx +++ b/packages/swell/src/auth/use-login.tsx @@ -1,14 +1,15 @@ -import { useCallback } from 'react' +import type { LoginHook } from '@vercel/commerce/types/login' import type { MutationHook } from '@vercel/commerce/utils/types' -import { CommerceError, ValidationError } from '@vercel/commerce/utils/errors' -import useCustomer from '../customer/use-customer' -import { +import type { CustomerUserError, Mutation, MutationCheckoutCreateArgs, } from '../../schema' -import useLogin, { UseLogin } from '@vercel/commerce/auth/use-login' -import { LoginHook } from '../types/login' + +import { useCallback } from 'react' +import { CommerceError, ValidationError } from '@vercel/commerce/utils/errors' +import useCustomer from '../customer/use-customer' +import useLogin, { type UseLogin } from '@vercel/commerce/auth/use-login' import { setCustomerToken } from '../utils' export default useLogin as UseLogin diff --git a/packages/swell/src/auth/use-logout.tsx b/packages/swell/src/auth/use-logout.tsx index 08eec0bac..e0fdb8ff6 100644 --- a/packages/swell/src/auth/use-logout.tsx +++ b/packages/swell/src/auth/use-logout.tsx @@ -1,9 +1,10 @@ -import { useCallback } from 'react' +import type { LogoutHook } from '@vercel/commerce/types/logout' import type { MutationHook } from '@vercel/commerce/utils/types' + +import { useCallback } from 'react' import useLogout, { UseLogout } from '@vercel/commerce/auth/use-logout' import useCustomer from '../customer/use-customer' import { getCustomerToken, setCustomerToken } from '../utils/customer-token' -import { LogoutHook } from '../types/logout' export default useLogout as UseLogout diff --git a/packages/swell/src/auth/use-signup.tsx b/packages/swell/src/auth/use-signup.tsx index 581312db9..080302791 100644 --- a/packages/swell/src/auth/use-signup.tsx +++ b/packages/swell/src/auth/use-signup.tsx @@ -1,9 +1,10 @@ -import { useCallback } from 'react' +import type { SignupHook } from '@vercel/commerce/types/signup' import type { MutationHook } from '@vercel/commerce/utils/types' + +import { useCallback } from 'react' import { CommerceError } from '@vercel/commerce/utils/errors' -import useSignup, { UseSignup } from '@vercel/commerce/auth/use-signup' +import useSignup, { type UseSignup } from '@vercel/commerce/auth/use-signup' import useCustomer from '../customer/use-customer' -import { SignupHook } from '../types/signup' import handleLogin from '../utils/handle-login' export default useSignup as UseSignup diff --git a/packages/swell/src/cart/use-add-item.tsx b/packages/swell/src/cart/use-add-item.tsx index 048a1f45d..e80c71624 100644 --- a/packages/swell/src/cart/use-add-item.tsx +++ b/packages/swell/src/cart/use-add-item.tsx @@ -1,11 +1,12 @@ +import type { AddItemHook } from '@vercel/commerce/types/cart' import type { MutationHook } from '@vercel/commerce/utils/types' + import { CommerceError } from '@vercel/commerce/utils/errors' -import useAddItem, { UseAddItem } from '@vercel/commerce/cart/use-add-item' +import useAddItem, { type UseAddItem } from '@vercel/commerce/cart/use-add-item' import useCart from './use-cart' import { checkoutToCart } from './utils' import { getCheckoutId } from '../utils' import { useCallback } from 'react' -import { AddItemHook } from '../types/cart' export default useAddItem as UseAddItem diff --git a/packages/swell/src/cart/use-remove-item.tsx b/packages/swell/src/cart/use-remove-item.tsx index 6e511656b..1a9de9c8c 100644 --- a/packages/swell/src/cart/use-remove-item.tsx +++ b/packages/swell/src/cart/use-remove-item.tsx @@ -45,7 +45,7 @@ export const handler = { const { mutate } = useCart() return useCallback( - async function removeItem(input) { + async function removeItem(input: { id: string }) { const data = await fetch({ input: { itemId: input.id } }) await mutate(data, false) diff --git a/packages/swell/src/cart/use-update-item.tsx b/packages/swell/src/cart/use-update-item.tsx index c741250c2..8a3a5191b 100644 --- a/packages/swell/src/cart/use-update-item.tsx +++ b/packages/swell/src/cart/use-update-item.tsx @@ -1,23 +1,25 @@ -import { useCallback } from 'react' -import debounce from 'lodash.debounce' import type { HookFetcherContext, - MutationHook, MutationHookContext, } from '@vercel/commerce/utils/types' + +import type { UpdateItemHook, LineItem } from '@vercel/commerce/types/cart' + +import { useCallback } from 'react' +import debounce from 'lodash.debounce' + import { ValidationError } from '@vercel/commerce/utils/errors' // import useUpdateItem, { // UpdateItemInput as UpdateItemInputBase, // UseUpdateItem, // } from '@vercel/commerce/cart/use-update-item' import useUpdateItem, { - UseUpdateItem, + type UseUpdateItem, } from '@vercel/commerce/cart/use-update-item' import useCart from './use-cart' import { handler as removeItemHandler } from './use-remove-item' -import { CartItemBody, LineItem } from '@vercel/commerce/types/cart' import { checkoutToCart } from './utils' -import { UpdateItemHook } from '../types/cart' + // export type UpdateItemInput = T extends LineItem // ? Partial> // : UpdateItemInputBase diff --git a/packages/swell/src/cart/utils/checkout-to-cart.ts b/packages/swell/src/cart/utils/checkout-to-cart.ts index c9becb104..af7d89602 100644 --- a/packages/swell/src/cart/utils/checkout-to-cart.ts +++ b/packages/swell/src/cart/utils/checkout-to-cart.ts @@ -1,4 +1,4 @@ -import { Cart } from '../../types' +import type { Cart } from '@vercel/commerce/types/cart' import { CommerceError } from '@vercel/commerce/utils/errors' import { diff --git a/packages/swell/src/customer/use-customer.tsx b/packages/swell/src/customer/use-customer.tsx index 0875310fd..45b81b2ff 100644 --- a/packages/swell/src/customer/use-customer.tsx +++ b/packages/swell/src/customer/use-customer.tsx @@ -1,9 +1,10 @@ +import type { SWRHook } from '@vercel/commerce/utils/types' +import type { CustomerHook } from '@vercel/commerce/types/customer' + import useCustomer, { - UseCustomer, + type UseCustomer, } from '@vercel/commerce/customer/use-customer' -import { SWRHook } from '@vercel/commerce/utils/types' import { normalizeCustomer } from '../utils/normalize' -import type { CustomerHook } from '../types/customer' export default useCustomer as UseCustomer diff --git a/packages/swell/src/product/use-search.tsx b/packages/swell/src/product/use-search.tsx index b996099a4..81f8596d9 100644 --- a/packages/swell/src/product/use-search.tsx +++ b/packages/swell/src/product/use-search.tsx @@ -1,8 +1,9 @@ +import type { SwellProduct } from '../types' +import type { SearchProductsHook } from '@vercel/commerce/types/product' + import { SWRHook } from '@vercel/commerce/utils/types' -import useSearch, { UseSearch } from '@vercel/commerce/product/use-search' +import useSearch, { type UseSearch } from '@vercel/commerce/product/use-search' import { normalizeProduct } from '../utils' -import { SwellProduct } from '../types' -import type { SearchProductsHook } from '../types/product' export default useSearch as UseSearch diff --git a/packages/swell/src/types.ts b/packages/swell/src/types.ts index b02bbd8ca..5d3e7507e 100644 --- a/packages/swell/src/types.ts +++ b/packages/swell/src/types.ts @@ -1,6 +1,4 @@ -import * as Core from '@vercel/commerce/types/cart' -import { Customer } from '@vercel/commerce/types' -import { CheckoutLineItem } from '../schema' +import type { CheckoutLineItem } from '../schema' export type SwellImage = { file: { @@ -88,15 +86,6 @@ export type SwellCheckout = { lineItems: CheckoutLineItem[] } -export interface Cart extends Core.Cart { - id: string - lineItems: LineItem[] -} - -export interface LineItem extends Core.LineItem { - options?: any[] -} - /** * Cart mutations */ @@ -105,8 +94,3 @@ export type OptionSelections = { option_id: number option_value: number | string } - -export type CartItemBody = Core.CartItemBody & { - productId: string // The product id is always required for BC - optionSelections?: OptionSelections -} diff --git a/packages/swell/src/types/login.ts b/packages/swell/src/types/login.ts index 44b017dcd..438d541b2 100644 --- a/packages/swell/src/types/login.ts +++ b/packages/swell/src/types/login.ts @@ -1,11 +1 @@ -import * as Core from '@vercel/commerce/types/login' -import { LoginBody, LoginTypes } from '@vercel/commerce/types/login' - export * from '@vercel/commerce/types/login' - -export type LoginHook = { - data: null - actionInput: LoginBody - fetcherInput: LoginBody - body: T['body'] -} diff --git a/packages/swell/src/utils/get-categories.ts b/packages/swell/src/utils/get-categories.ts index ab38bae96..ee951b335 100644 --- a/packages/swell/src/utils/get-categories.ts +++ b/packages/swell/src/utils/get-categories.ts @@ -1,5 +1,5 @@ import { SwellConfig } from '../api' -import { Category } from '../types/site' +import type { Category } from '@vercel/commerce/types/site' const getCategories = async (config: SwellConfig): Promise => { const data = await config.fetch('categories', 'get') diff --git a/packages/swell/src/utils/get-vendors.ts b/packages/swell/src/utils/get-vendors.ts index 1ede68835..cef70fa91 100644 --- a/packages/swell/src/utils/get-vendors.ts +++ b/packages/swell/src/utils/get-vendors.ts @@ -1,26 +1,14 @@ import { SwellConfig } from '../api' -export type BrandNode = { - name: string - path: string -} - -export type BrandEdge = { - node: BrandNode -} - -export type Brands = BrandEdge[] - const getVendors = async (config: SwellConfig) => { const vendors: [string] = (await config.fetch('attributes', 'get', ['brand']))?.values ?? [] return [...new Set(vendors)].map((v) => ({ - node: { - entityId: v, - name: v, - path: `brands/${v}`, - }, + id: v, + name: v, + slug: v.replace(/\s+/g, '-').toLowerCase(), + path: `/${v}`, })) } diff --git a/packages/swell/src/utils/normalize.ts b/packages/swell/src/utils/normalize.ts index 9bbad5961..89bcd06f0 100644 --- a/packages/swell/src/utils/normalize.ts +++ b/packages/swell/src/utils/normalize.ts @@ -1,9 +1,9 @@ -import { Customer } from '../types/customer' -import { Product, ProductOption } from '../types/product' -import { MoneyV2 } from '../../schema' +import type { Cart, LineItem } from '@vercel/commerce/types/cart' +import type { Customer } from '@vercel/commerce/types/customer' +import type { Product, ProductOption } from '@vercel/commerce/types/product' +import type { MoneyV2 } from '../../schema' import type { - Cart, CartLineItem, SwellCustomer, SwellProduct, @@ -12,7 +12,6 @@ import type { ProductOptionValue, SwellProductOptionValue, SwellCart, - LineItem, } from '../types' const money = ({ amount, currencyCode }: MoneyV2) => { @@ -121,7 +120,6 @@ export function normalizeProduct(swellProduct: SwellProduct): Product { currency: currencyCode, } = swellProduct // ProductView accesses variants for each product - const emptyVariants = [{ options: [], id, name }] const productOptions = options ? options.map((o) => normalizeProductOption(o)) @@ -138,10 +136,7 @@ export function normalizeProduct(swellProduct: SwellProduct): Product { vendor: '', path: `/${slug}`, images: productImages, - variants: - productVariants && productVariants.length - ? productVariants - : emptyVariants, + variants: productVariants && productVariants.length ? productVariants : [], options: productOptions, price: { value, @@ -214,11 +209,12 @@ function normalizeLineItem({ price: price, listPrice: price, }, - path: '', + path: `/${product.slug}`, discounts: [], options: [ { - value: variant?.name, + name: variant?.name!, + value: variant?.name!, }, ], } diff --git a/packages/swell/src/wishlist/use-wishlist.tsx b/packages/swell/src/wishlist/use-wishlist.tsx index 0506ae9d4..4d99aca1d 100644 --- a/packages/swell/src/wishlist/use-wishlist.tsx +++ b/packages/swell/src/wishlist/use-wishlist.tsx @@ -1,22 +1,11 @@ // TODO: replace this hook and other wishlist hooks with a handler, or remove them if // Swell doesn't have a wishlist +import type { Wishlist } from '@vercel/commerce/types/wishlist' import { HookFetcher } from '@vercel/commerce/utils/types' -import { Product } from '../../schema' const defaultOpts = {} -export type Wishlist = { - items: [ - { - product_id: number - variant_id: number - id: number - product: Product - } - ] -} - export interface UseWishlistOptions { includeProducts?: boolean } diff --git a/packages/vendure/package.json b/packages/vendure/package.json index 484a52743..87c895064 100644 --- a/packages/vendure/package.json +++ b/packages/vendure/package.json @@ -49,16 +49,16 @@ } }, "dependencies": { - "@vercel/commerce": "^0.0.1", - "@vercel/fetch": "^6.1.1" + "@vercel/commerce": "workspace:*" }, "peerDependencies": { - "next": "^12", - "react": "^17", - "react-dom": "^17" + "next": "^13", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { - "@graphql-codegen/cli": "^2.3.1", + "@babel/core": "^7.20.5", + "@graphql-codegen/cli": "2.7.0", "@graphql-codegen/schema-ast": "^2.4.1", "@graphql-codegen/typescript": "^2.4.2", "@graphql-codegen/typescript-operations": "^2.2.2", @@ -66,15 +66,17 @@ "@taskr/esnext": "^1.1.0", "@taskr/watch": "^1.1.0", "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/react": "^18.0.14", + "@types/node-fetch": "^2.6.2", + "graphql": "^16.0.0", "lint-staged": "^12.1.7", - "next": "^12.0.8", + "next": "^13.0.6", "prettier": "^2.5.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "taskr": "^1.1.0", "taskr-swc": "^0.0.1", - "typescript": "^4.5.4" + "typescript": "^4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json}": [ diff --git a/packages/vendure/src/api/endpoints/cart/index.ts b/packages/vendure/src/api/endpoints/cart/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/cart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/catalog/index.ts b/packages/vendure/src/api/endpoints/catalog/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/catalog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/catalog/products.ts b/packages/vendure/src/api/endpoints/catalog/products.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/catalog/products.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/checkout/index.ts b/packages/vendure/src/api/endpoints/checkout/index.ts index e063dbf58..71bb8f340 100644 --- a/packages/vendure/src/api/endpoints/checkout/index.ts +++ b/packages/vendure/src/api/endpoints/checkout/index.ts @@ -1,15 +1,9 @@ -import { NextApiHandler } from 'next' import { CommerceAPI, createEndpoint, GetAPISchema } from '@vercel/commerce/api' import { CheckoutSchema } from '@vercel/commerce/types/checkout' import checkoutEndpoint from '@vercel/commerce/api/endpoints/checkout' -const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ - req, - res, - config, -}) => { - try { - const html = ` +const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async () => { + const html = ` @@ -31,16 +25,11 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ ` - res.status(200) - res.setHeader('Content-Type', 'text/html') - res.write(html) - res.end() - } catch (error) { - console.error(error) - - const message = 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) + return { + html, + headers: { + 'Content-Type': 'text/html', + }, } } diff --git a/packages/vendure/src/api/endpoints/customer/address.ts b/packages/vendure/src/api/endpoints/customer/address.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/customer/address.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/customer/card.ts b/packages/vendure/src/api/endpoints/customer/card.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/customer/card.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/customer/index.ts b/packages/vendure/src/api/endpoints/customer/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/customer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/index.ts b/packages/vendure/src/api/endpoints/index.ts new file mode 100644 index 000000000..4cbddc979 --- /dev/null +++ b/packages/vendure/src/api/endpoints/index.ts @@ -0,0 +1,12 @@ +import type { Provider, VendureAPI } from '..' + +import createEndpoints from '@vercel/commerce/api/endpoints' +import checkout from './checkout' + +const endpoints = { + checkout, +} + +export default function vendureAPI(commerce: VendureAPI) { + return createEndpoints(commerce, endpoints) +} \ No newline at end of file diff --git a/packages/vendure/src/api/endpoints/login/index.ts b/packages/vendure/src/api/endpoints/login/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/logout/index.ts b/packages/vendure/src/api/endpoints/logout/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/logout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/signup/index.ts b/packages/vendure/src/api/endpoints/signup/index.ts deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/signup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/endpoints/wishlist/index.tsx b/packages/vendure/src/api/endpoints/wishlist/index.tsx deleted file mode 100644 index 491bf0ac9..000000000 --- a/packages/vendure/src/api/endpoints/wishlist/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export default function noopApi(...args: any[]): void {} diff --git a/packages/vendure/src/api/index.ts b/packages/vendure/src/api/index.ts index cbe56be56..41c0189be 100644 --- a/packages/vendure/src/api/index.ts +++ b/packages/vendure/src/api/index.ts @@ -49,6 +49,8 @@ export const provider = { config, operations } export type Provider = typeof provider +export type VendureAPI

= CommerceAPI

+ export function getCommerceApi

( customProvider: P = provider as any ): CommerceAPI

{ diff --git a/packages/vendure/src/api/operations/get-product.ts b/packages/vendure/src/api/operations/get-product.ts index 6b58e9694..93fb50f1e 100644 --- a/packages/vendure/src/api/operations/get-product.ts +++ b/packages/vendure/src/api/operations/get-product.ts @@ -33,6 +33,7 @@ export default function getProductOperation({ name: product.name, description: product.description, slug: product.slug, + path: `/${product.slug}`, images: product.assets.map((a) => ({ url: a.preview, alt: a.name, diff --git a/packages/vendure/src/api/operations/get-site-info.ts b/packages/vendure/src/api/operations/get-site-info.ts index ce2f5fa3f..b3dcc48e7 100644 --- a/packages/vendure/src/api/operations/get-site-info.ts +++ b/packages/vendure/src/api/operations/get-site-info.ts @@ -33,8 +33,8 @@ export default function getSiteInfoOperation({ }) const collections = data.collections?.items.map((i) => ({ ...i, - entityId: i.id, - path: i.slug, + id: i.id, + path: `/${i.id}`, productCount: i.productVariants.totalItems, })) const categories = arrayToTree(collections).children diff --git a/packages/vendure/src/api/operations/login.ts b/packages/vendure/src/api/operations/login.ts index 07ee5fa1d..bcfa471ab 100644 --- a/packages/vendure/src/api/operations/login.ts +++ b/packages/vendure/src/api/operations/login.ts @@ -1,10 +1,9 @@ -import type { ServerResponse } from 'http' import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' import { ValidationError } from '@vercel/commerce/utils/errors' -import type { LoginOperation } from '../../types/login' +import type { LoginOperation } from '@vercel/commerce/types/login' import type { LoginMutation } from '../../../schema' import { Provider, VendureConfig } from '..' import { loginMutation } from '../../utils/mutations/log-in-mutation' @@ -15,14 +14,14 @@ export default function loginOperation({ async function login(opts: { variables: T['variables'] config?: Partial - res: ServerResponse + res: Response }): Promise async function login( opts: { variables: T['variables'] config?: Partial - res: ServerResponse + res: Response } & OperationOptions ): Promise @@ -34,7 +33,7 @@ export default function loginOperation({ }: { query?: string variables: T['variables'] - res: ServerResponse + res: Response config?: Partial }): Promise { const config = commerce.getConfig(cfg) diff --git a/packages/vendure/src/api/utils/fetch-graphql-api.ts b/packages/vendure/src/api/utils/fetch-graphql-api.ts index 7c0fbc792..61183ada3 100644 --- a/packages/vendure/src/api/utils/fetch-graphql-api.ts +++ b/packages/vendure/src/api/utils/fetch-graphql-api.ts @@ -1,28 +1,29 @@ import { FetcherError } from '@vercel/commerce/utils/errors' -import type { GraphQLFetcher } from '@vercel/commerce/api' +import type { FetchOptions, GraphQLFetcher } from '@vercel/commerce/api' import { getCommerceApi } from '../' -import fetch from './fetch' const fetchGraphqlApi: GraphQLFetcher = async ( query: string, - { variables, preview } = {}, - fetchOptions + { variables } = {}, + options?: FetchOptions ) => { const config = getCommerceApi().getConfig() + const res = await fetch(config.commerceUrl, { - ...fetchOptions, - method: 'POST', + method: options?.method || 'POST', headers: { - ...fetchOptions?.headers, + ...options?.headers, 'Content-Type': 'application/json', }, body: JSON.stringify({ + ...options?.body, query, variables, }), }) const json = await res.json() + if (json.errors) { throw new FetcherError({ errors: json.errors ?? [{ message: 'Failed to fetch Vendure API' }], diff --git a/packages/vendure/src/auth/use-login.tsx b/packages/vendure/src/auth/use-login.tsx index ce1a45456..56c701119 100644 --- a/packages/vendure/src/auth/use-login.tsx +++ b/packages/vendure/src/auth/use-login.tsx @@ -1,10 +1,10 @@ import { useCallback } from 'react' import { MutationHook } from '@vercel/commerce/utils/types' -import useLogin, { UseLogin } from '@vercel/commerce/auth/use-login' -import { LoginHook } from '../types/login' +import useLogin, { type UseLogin } from '@vercel/commerce/auth/use-login' +import type { LoginHook } from '@vercel/commerce/types/login' import { CommerceError, ValidationError } from '@vercel/commerce/utils/errors' import useCustomer from '../customer/use-customer' -import { LoginMutation, LoginMutationVariables } from '../../schema' +import type { LoginMutation, LoginMutationVariables } from '../../schema' import { loginMutation } from '../utils/mutations/log-in-mutation' export default useLogin as UseLogin diff --git a/packages/vendure/src/auth/use-logout.tsx b/packages/vendure/src/auth/use-logout.tsx index 8a099cf77..e24976a94 100644 --- a/packages/vendure/src/auth/use-logout.tsx +++ b/packages/vendure/src/auth/use-logout.tsx @@ -1,10 +1,10 @@ import { useCallback } from 'react' -import { MutationHook } from '@vercel/commerce/utils/types' -import useLogout, { UseLogout } from '@vercel/commerce/auth/use-logout' +import type { MutationHook } from '@vercel/commerce/utils/types' +import useLogout, { type UseLogout } from '@vercel/commerce/auth/use-logout' import useCustomer from '../customer/use-customer' -import { LogoutMutation } from '../../schema' +import type { LogoutMutation } from '../../schema' import { logoutMutation } from '../utils/mutations/log-out-mutation' -import { LogoutHook } from '../types/logout' +import type { LogoutHook } from '@vercel/commerce/types/logout' export default useLogout as UseLogout diff --git a/packages/vendure/src/auth/use-signup.tsx b/packages/vendure/src/auth/use-signup.tsx index 0c19c91bb..3586ca66b 100644 --- a/packages/vendure/src/auth/use-signup.tsx +++ b/packages/vendure/src/auth/use-signup.tsx @@ -1,15 +1,11 @@ import { useCallback } from 'react' import { MutationHook } from '@vercel/commerce/utils/types' import { CommerceError, ValidationError } from '@vercel/commerce/utils/errors' -import useSignup, { UseSignup } from '@vercel/commerce/auth/use-signup' +import useSignup, { type UseSignup } from '@vercel/commerce/auth/use-signup' import useCustomer from '../customer/use-customer' -import { - RegisterCustomerInput, - SignupMutation, - SignupMutationVariables, -} from '../../schema' +import type { SignupMutation, SignupMutationVariables } from '../../schema' import { signupMutation } from '../utils/mutations/sign-up-mutation' -import { SignupHook } from '../types/signup' +import type { SignupHook } from '@vercel/commerce/types/signup' export default useSignup as UseSignup diff --git a/packages/vendure/src/cart/use-add-item.tsx b/packages/vendure/src/cart/use-add-item.tsx index d7bb0bf66..1b6f85040 100644 --- a/packages/vendure/src/cart/use-add-item.tsx +++ b/packages/vendure/src/cart/use-add-item.tsx @@ -1,12 +1,12 @@ import useAddItem, { UseAddItem } from '@vercel/commerce/cart/use-add-item' import { CommerceError } from '@vercel/commerce/utils/errors' -import { MutationHook } from '@vercel/commerce/utils/types' +import type { MutationHook } from '@vercel/commerce/utils/types' import { useCallback } from 'react' import useCart from './use-cart' import { AddItemToOrderMutation } from '../../schema' import { normalizeCart } from '../utils/normalize' import { addItemToOrderMutation } from '../utils/mutations/add-item-to-order-mutation' -import { AddItemHook } from '../types/cart' +import type { AddItemHook } from '@vercel/commerce/types/cart' export default useAddItem as UseAddItem diff --git a/packages/vendure/src/cart/use-cart.tsx b/packages/vendure/src/cart/use-cart.tsx index 750f11040..e298bf9f4 100644 --- a/packages/vendure/src/cart/use-cart.tsx +++ b/packages/vendure/src/cart/use-cart.tsx @@ -1,10 +1,10 @@ import { SWRHook } from '@vercel/commerce/utils/types' -import useCart, { UseCart } from '@vercel/commerce/cart/use-cart' +import useCart, { type UseCart } from '@vercel/commerce/cart/use-cart' import { ActiveOrderQuery, CartFragment } from '../../schema' import { normalizeCart } from '../utils/normalize' import { useMemo } from 'react' import { getCartQuery } from '../utils/queries/get-cart-query' -import { GetCartHook } from '../types/cart' +import type { GetCartHook } from '@vercel/commerce/types/cart' export type CartResult = { activeOrder?: CartFragment diff --git a/packages/vendure/src/cart/use-remove-item.tsx b/packages/vendure/src/cart/use-remove-item.tsx index 2aa316505..fbd07a31e 100644 --- a/packages/vendure/src/cart/use-remove-item.tsx +++ b/packages/vendure/src/cart/use-remove-item.tsx @@ -1,22 +1,17 @@ import { useCallback } from 'react' -import { - HookFetcherContext, - MutationHook, - MutationHookContext, - SWRHook, -} from '@vercel/commerce/utils/types' +import type { MutationHook } from '@vercel/commerce/utils/types' import useRemoveItem, { UseRemoveItem, } from '@vercel/commerce/cart/use-remove-item' import { CommerceError } from '@vercel/commerce/utils/errors' -import { Cart } from '@vercel/commerce/types/cart' + import useCart from './use-cart' import { RemoveOrderLineMutation, RemoveOrderLineMutationVariables, } from '../../schema' import { normalizeCart } from '../utils/normalize' -import { RemoveItemHook } from '../types/cart' +import type { RemoveItemHook } from '@vercel/commerce/types/cart' import { removeOrderLineMutation } from '../utils/mutations/remove-order-line-mutation' export default useRemoveItem as UseRemoveItem diff --git a/packages/vendure/src/cart/use-update-item.tsx b/packages/vendure/src/cart/use-update-item.tsx index 2f3c8d47b..f97f15d1d 100644 --- a/packages/vendure/src/cart/use-update-item.tsx +++ b/packages/vendure/src/cart/use-update-item.tsx @@ -8,7 +8,6 @@ import { CommerceError, ValidationError } from '@vercel/commerce/utils/errors' import useUpdateItem, { UseUpdateItem, } from '@vercel/commerce/cart/use-update-item' -import { CartItemBody, LineItem } from '@vercel/commerce/types/cart' import useCart from './use-cart' import { AdjustOrderLineMutation, @@ -16,7 +15,7 @@ import { } from '../../schema' import { normalizeCart } from '../utils/normalize' import { adjustOrderLineMutation } from '../utils/mutations/adjust-order-line-mutation' -import { UpdateItemHook } from '../types/cart' +import type { UpdateItemHook, LineItem } from '@vercel/commerce/types/cart' export type UpdateItemActionInput = T extends LineItem ? Partial diff --git a/packages/vendure/src/customer/use-customer.tsx b/packages/vendure/src/customer/use-customer.tsx index 80da077ff..00b14a46a 100644 --- a/packages/vendure/src/customer/use-customer.tsx +++ b/packages/vendure/src/customer/use-customer.tsx @@ -4,7 +4,7 @@ import useCustomer, { } from '@vercel/commerce/customer/use-customer' import { ActiveCustomerQuery } from '../../schema' import { activeCustomerQuery } from '../utils/queries/active-customer-query' -import { CustomerHook } from '../types/customer' +import { CustomerHook } from '@vercel/commerce/types/customer' export default useCustomer as UseCustomer diff --git a/packages/vendure/src/fetcher.ts b/packages/vendure/src/fetcher.ts index ad0d4bc66..e98b25c4e 100644 --- a/packages/vendure/src/fetcher.ts +++ b/packages/vendure/src/fetcher.ts @@ -44,7 +44,7 @@ export const fetcher: Fetcher = async ({ if (res.ok) { const { data, errors } = await res.json() if (errors) { - throw await new FetcherError({ status: res.status, errors }) + throw new FetcherError({ status: res.status, errors }) } return data } diff --git a/packages/vendure/src/product/use-search.tsx b/packages/vendure/src/product/use-search.tsx index 86c6467d1..bd380cf41 100644 --- a/packages/vendure/src/product/use-search.tsx +++ b/packages/vendure/src/product/use-search.tsx @@ -4,7 +4,7 @@ import { Product } from '@vercel/commerce/types/product' import { SearchQuery, SearchQueryVariables } from '../../schema' import { normalizeSearchResult } from '../utils/normalize' import { searchQuery } from '../utils/queries/search-query' -import { SearchProductsHook } from '../types/product' +import type { SearchProductsHook } from '@vercel/commerce/types/product' export default useSearch as UseSearch diff --git a/packages/vendure/src/types/cart.ts b/packages/vendure/src/types/cart.ts deleted file mode 100644 index e6838fb45..000000000 --- a/packages/vendure/src/types/cart.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/cart' diff --git a/packages/vendure/src/types/checkout.ts b/packages/vendure/src/types/checkout.ts deleted file mode 100644 index d139db685..000000000 --- a/packages/vendure/src/types/checkout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/checkout' diff --git a/packages/vendure/src/types/common.ts b/packages/vendure/src/types/common.ts deleted file mode 100644 index 23b8daa11..000000000 --- a/packages/vendure/src/types/common.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/common' diff --git a/packages/vendure/src/types/customer.ts b/packages/vendure/src/types/customer.ts deleted file mode 100644 index c637055b9..000000000 --- a/packages/vendure/src/types/customer.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/customer' diff --git a/packages/vendure/src/types/index.ts b/packages/vendure/src/types/index.ts deleted file mode 100644 index 7ab0b7f64..000000000 --- a/packages/vendure/src/types/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as Cart from './cart' -import * as Checkout from './checkout' -import * as Common from './common' -import * as Customer from './customer' -import * as Login from './login' -import * as Logout from './logout' -import * as Page from './page' -import * as Product from './product' -import * as Signup from './signup' -import * as Site from './site' -import * as Wishlist from './wishlist' - -export type { - Cart, - Checkout, - Common, - Customer, - Login, - Logout, - Page, - Product, - Signup, - Site, - Wishlist, -} diff --git a/packages/vendure/src/types/login.ts b/packages/vendure/src/types/login.ts deleted file mode 100644 index 283a5751c..000000000 --- a/packages/vendure/src/types/login.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as Core from '@vercel/commerce/types/login' -import type { LoginMutationVariables } from '../../schema' -import { LoginBody, LoginTypes } from '@vercel/commerce/types/login' - -export * from '@vercel/commerce/types/login' - -export type LoginHook = { - data: null - actionInput: LoginBody - fetcherInput: LoginBody - body: T['body'] -} diff --git a/packages/vendure/src/types/logout.ts b/packages/vendure/src/types/logout.ts deleted file mode 100644 index 1de06f8dc..000000000 --- a/packages/vendure/src/types/logout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/logout' diff --git a/packages/vendure/src/types/page.ts b/packages/vendure/src/types/page.ts deleted file mode 100644 index 12f6b02d7..000000000 --- a/packages/vendure/src/types/page.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/page' diff --git a/packages/vendure/src/types/product.ts b/packages/vendure/src/types/product.ts deleted file mode 100644 index 72ca02f02..000000000 --- a/packages/vendure/src/types/product.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/product' diff --git a/packages/vendure/src/types/signup.ts b/packages/vendure/src/types/signup.ts deleted file mode 100644 index 3f0d1af5a..000000000 --- a/packages/vendure/src/types/signup.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/signup' diff --git a/packages/vendure/src/types/site.ts b/packages/vendure/src/types/site.ts deleted file mode 100644 index 96a2e476e..000000000 --- a/packages/vendure/src/types/site.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/site' diff --git a/packages/vendure/src/types/wishlist.ts b/packages/vendure/src/types/wishlist.ts deleted file mode 100644 index af92d9f63..000000000 --- a/packages/vendure/src/types/wishlist.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vercel/commerce/types/wishlist' diff --git a/packages/vendure/src/utils/normalize.ts b/packages/vendure/src/utils/normalize.ts index adde43674..9275ec2bf 100644 --- a/packages/vendure/src/utils/normalize.ts +++ b/packages/vendure/src/utils/normalize.ts @@ -8,7 +8,7 @@ export function normalizeSearchResult(item: SearchResultFragment): Product { name: item.productName, description: item.description, slug: item.slug, - path: item.slug, + path: `/${item.slug}`, images: [ { url: item.productAsset?.preview @@ -45,7 +45,7 @@ export function normalizeCart(order: CartFragment): Cart { productId: l.productVariant.productId, images: [{ url: l.featuredAsset?.preview + '?preset=thumb' || '' }], discounts: l.discounts.map((d) => ({ value: d.amount / 100 })), - path: '', + path: `/${l.productVariant.product.slug}`, variant: { id: l.productVariant.id, name: l.productVariant.name, diff --git a/packages/vendure/src/wishlist/use-wishlist.tsx b/packages/vendure/src/wishlist/use-wishlist.tsx index ab4192171..cb9dcc815 100644 --- a/packages/vendure/src/wishlist/use-wishlist.tsx +++ b/packages/vendure/src/wishlist/use-wishlist.tsx @@ -1,22 +1,11 @@ // TODO: replace this hook and other wishlist hooks with a handler, or remove them if // Vendure doesn't have a built-in wishlist -import { HookFetcher } from '@vercel/commerce/utils/types' -import { Product } from '../../schema' +import type { HookFetcher } from '@vercel/commerce/utils/types' +import type { Wishlist } from '@vercel/commerce/types/wishlist' const defaultOpts = {} -export type Wishlist = { - items: [ - { - product_id: number - variant_id: number - id: number - product: Product - } - ] -} - export interface UseWishlistOptions { includeProducts?: boolean } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..3669499f1 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,10181 @@ +lockfileVersion: 5.4 + +importers: + + .: + specifiers: + husky: ^8.0.1 + prettier: ^2.7.1 + turbo: ^1.4.6 + devDependencies: + husky: 8.0.1 + prettier: 2.7.1 + turbo: 1.4.6 + + packages/bigcommerce: + specifiers: + '@cfworker/uuid': ^1.12.4 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@tsndr/cloudflare-worker-jwt': ^2.1.0 + '@types/cookie': ^0.4.1 + '@types/jsonwebtoken': ^8.5.7 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + cookie: ^0.4.1 + immutability-helper: ^3.1.1 + js-cookie: ^3.0.1 + jsonwebtoken: ^8.5.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + uuidv4: ^6.2.13 + dependencies: + '@cfworker/uuid': 1.12.4 + '@tsndr/cloudflare-worker-jwt': 2.1.0 + '@vercel/commerce': link:../commerce + cookie: 0.4.2 + immutability-helper: 3.1.1 + js-cookie: 3.0.1 + jsonwebtoken: 8.5.1 + lodash.debounce: 4.0.8 + uuidv4: 6.2.13 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/cookie': 0.4.1 + '@types/jsonwebtoken': 8.5.9 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/commerce: + specifiers: + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/js-cookie': ^3.0.1 + '@types/node': ^17.0.8 + '@types/node-fetch': 2.6.2 + '@types/react': ^18.0.14 + '@vercel/edge': ^0.0.4 + deepmerge: ^4.2.2 + import-cwd: ^3.0.0 + js-cookie: ^3.0.1 + lint-staged: ^12.1.7 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + swr: ^1.3.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + zod: ^3.19.1 + dependencies: + '@vercel/edge': 0.0.4 + deepmerge: 4.2.2 + import-cwd: 3.0.0 + js-cookie: 3.0.1 + swr: 1.3.0_react@18.2.0 + zod: 3.19.1 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/js-cookie': 3.0.2 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/commercejs: + specifiers: + '@chec/commerce.js': ^2.8.0 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/chec__commerce.js': ^2.8.4 + '@types/cookie': ^0.4.1 + '@types/js-cookie': ^3.0.2 + '@types/jsonwebtoken': ^8.5.7 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + cookie: ^0.4.1 + js-cookie: ^3.0.1 + jsonwebtoken: ^8.5.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@chec/commerce.js': 2.8.0 + '@vercel/commerce': link:../commerce + cookie: 0.4.2 + js-cookie: 3.0.1 + jsonwebtoken: 8.5.1 + lodash.debounce: 4.0.8 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/chec__commerce.js': 2.8.5 + '@types/cookie': 0.4.1 + '@types/js-cookie': 3.0.2 + '@types/jsonwebtoken': 8.5.9 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/kibocommerce: + specifiers: + '@babel/core': ^7.20.5 + '@graphql-codegen/cli': ^2.7.0 + '@graphql-codegen/schema-ast': ^2.4.1 + '@graphql-codegen/typescript': ^2.4.2 + '@graphql-codegen/typescript-operations': ^2.2.2 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': 2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + graphql: ^16.0.0 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + ts-node: ^10.9.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + lodash.debounce: 4.0.8 + devDependencies: + '@babel/core': 7.20.5 + '@graphql-codegen/cli': 2.12.0_5nhrphdxro5xxa2f5vmz5votda + '@graphql-codegen/schema-ast': 2.5.1_graphql@16.6.0 + '@graphql-codegen/typescript': 2.7.3_graphql@16.6.0 + '@graphql-codegen/typescript-operations': 2.5.3_graphql@16.6.0 + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + graphql: 16.6.0 + lint-staged: 12.5.0 + next: 13.0.6_672uxklweod7ene3nqtsh262ca + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + ts-node: 10.9.1_rb7lfb2dlgdf5f7m6mcvvespxa + typescript: 4.8.3 + + packages/local: + specifiers: + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/node': ^17.0.8 + '@types/node-fetch': 2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + lint-staged: ^12.1.7 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/ordercloud: + specifiers: + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/cookie': ^0.4.1 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + cookie: ^0.4.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + cookie: 0.4.2 + lodash.debounce: 4.0.8 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/cookie': 0.4.1 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/saleor: + specifiers: + '@babel/core': ^7.20.5 + '@graphql-codegen/cli': ^2.7.0 + '@graphql-codegen/schema-ast': ^2.4.1 + '@graphql-codegen/typescript': ^2.4.2 + '@graphql-codegen/typescript-operations': ^2.2.2 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/js-cookie': ^3.0.2 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + graphql: ^16.0.0 + js-cookie: ^3.0.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + ts-node: ^10.9.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + js-cookie: 3.0.1 + lodash.debounce: 4.0.8 + devDependencies: + '@babel/core': 7.20.5 + '@graphql-codegen/cli': 2.12.0_5nhrphdxro5xxa2f5vmz5votda + '@graphql-codegen/schema-ast': 2.5.1_graphql@16.6.0 + '@graphql-codegen/typescript': 2.7.3_graphql@16.6.0 + '@graphql-codegen/typescript-operations': 2.5.3_graphql@16.6.0 + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + graphql: 16.6.0 + lint-staged: 12.5.0 + next: 13.0.6_672uxklweod7ene3nqtsh262ca + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + ts-node: 10.9.1_rb7lfb2dlgdf5f7m6mcvvespxa + typescript: 4.8.3 + + packages/sfcc: + specifiers: + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + commerce-sdk: ^2.7.0 + lint-staged: ^12.1.7 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + commerce-sdk: 2.8.0 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/shopify: + specifiers: + '@babel/core': ^7.20.5 + '@graphql-codegen/cli': 2.7.0 + '@graphql-codegen/schema-ast': ^2.4.1 + '@graphql-codegen/typescript': ^2.6.0 + '@graphql-codegen/typescript-operations': ^2.4.3 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.debounce': ^4.0.7 + '@types/node': ^18.0.3 + '@types/node-fetch': 2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + dotenv: ^16.0.1 + graphql: ^16.0.0 + js-cookie: ^3.0.1 + lint-staged: ^13.0.3 + lodash.debounce: ^4.0.8 + next: ^12.2.1 + prettier: ^2.7.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: workspace:* + typescript: ^4.3.4 + dependencies: + '@vercel/commerce': link:../commerce + js-cookie: 3.0.1 + lodash.debounce: 4.0.8 + devDependencies: + '@babel/core': 7.20.5 + '@graphql-codegen/cli': 2.7.0_gholt4t4onvjnzhsre2mzmeyhy + '@graphql-codegen/schema-ast': 2.5.1_graphql@16.6.0 + '@graphql-codegen/typescript': 2.7.3_graphql@16.6.0 + '@graphql-codegen/typescript-operations': 2.5.3_graphql@16.6.0 + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.debounce': 4.0.7 + '@types/node': 18.7.18 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + dotenv: 16.0.2 + graphql: 16.6.0 + lint-staged: 13.0.3 + next: 12.3.0_672uxklweod7ene3nqtsh262ca + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/spree: + specifiers: + '@spree/storefront-api-v2-sdk': ^5.1.1 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/js-cookie': ^3.0.2 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + js-cookie: ^3.0.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + swr: ^1.3.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@spree/storefront-api-v2-sdk': 5.1.4 + '@vercel/commerce': link:../commerce + js-cookie: 3.0.1 + lodash.debounce: 4.0.8 + swr: 1.3.0_react@18.2.0 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/swell: + specifiers: + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/js-cookie': ^3.0.2 + '@types/lodash.debounce': ^4.0.6 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + js-cookie: ^3.0.1 + lint-staged: ^12.1.7 + lodash.debounce: ^4.0.8 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + swell-js: ^4.0.0-next.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + js-cookie: 3.0.1 + lodash.debounce: 4.0.8 + swell-js: 4.0.0-next.0 + devDependencies: + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.debounce': 4.0.7 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + lint-staged: 12.5.0 + next: 13.0.6_biqbaboplfbrettd7655fr4n2y + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + packages/taskr-swc: + specifiers: + '@swc/core': ^1.2.138 + prettier: ^2.5.1 + devDependencies: + '@swc/core': 1.3.0 + prettier: 2.7.1 + + packages/vendure: + specifiers: + '@babel/core': ^7.20.5 + '@graphql-codegen/cli': 2.7.0 + '@graphql-codegen/schema-ast': ^2.4.1 + '@graphql-codegen/typescript': ^2.4.2 + '@graphql-codegen/typescript-operations': ^2.2.2 + '@taskr/clear': ^1.1.0 + '@taskr/esnext': ^1.1.0 + '@taskr/watch': ^1.1.0 + '@types/node': ^17.0.8 + '@types/node-fetch': ^2.6.2 + '@types/react': ^18.0.14 + '@vercel/commerce': workspace:* + graphql: ^16.0.0 + lint-staged: ^12.1.7 + next: ^13.0.6 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + taskr: ^1.1.0 + taskr-swc: ^0.0.1 + typescript: ^4.7.4 + dependencies: + '@vercel/commerce': link:../commerce + devDependencies: + '@babel/core': 7.20.5 + '@graphql-codegen/cli': 2.7.0_fte77dov2vin5jxmf6euzzc57i + '@graphql-codegen/schema-ast': 2.5.1_graphql@16.6.0 + '@graphql-codegen/typescript': 2.7.3_graphql@16.6.0 + '@graphql-codegen/typescript-operations': 2.5.3_graphql@16.6.0 + '@taskr/clear': 1.1.0 + '@taskr/esnext': 1.1.0 + '@taskr/watch': 1.1.0 + '@types/node': 17.0.45 + '@types/node-fetch': 2.6.2 + '@types/react': 18.0.20 + graphql: 16.6.0 + lint-staged: 12.5.0 + next: 13.0.6_672uxklweod7ene3nqtsh262ca + prettier: 2.7.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + taskr: 1.1.0 + taskr-swc: link:../taskr-swc + typescript: 4.8.3 + + site: + specifiers: + '@next/bundle-analyzer': ^12.0.8 + '@radix-ui/react-dropdown-menu': ^1.0.0 + '@react-spring/web': ^9.4.1 + '@types/body-scroll-lock': ^3.1.0 + '@types/js-cookie': ^3.0.1 + '@types/lodash.random': ^3.2.6 + '@types/lodash.throttle': ^4.1.6 + '@types/node': ^18.0.3 + '@types/react': ^18.0.20 + '@types/react-dom': ^18.0.6 + '@vercel/commerce': workspace:* + '@vercel/commerce-bigcommerce': workspace:* + '@vercel/commerce-commercejs': workspace:* + '@vercel/commerce-kibocommerce': workspace:* + '@vercel/commerce-local': workspace:* + '@vercel/commerce-ordercloud': workspace:* + '@vercel/commerce-saleor': workspace:* + '@vercel/commerce-sfcc': workspace:* + '@vercel/commerce-shopify': workspace:* + '@vercel/commerce-spree': workspace:* + '@vercel/commerce-swell': workspace:* + '@vercel/commerce-vendure': workspace:* + autoprefixer: ^10.4.2 + body-scroll-lock: ^4.0.0-beta.0 + clsx: ^1.1.1 + email-validator: ^2.0.4 + eslint: ^8.6.0 + eslint-config-next: ^12.0.8 + eslint-config-prettier: ^8.3.0 + js-cookie: ^3.0.1 + keen-slider: ^6.7.0 + lint-staged: ^13.0.3 + lodash.random: ^3.2.0 + lodash.throttle: ^4.1.1 + next: ^13.0.4 + next-themes: ^0.2.0 + postcss: ^8.3.5 + postcss-flexbugs-fixes: ^5.0.2 + postcss-nesting: ^10.1.10 + postcss-preset-env: ^7.2.3 + prettier: ^2.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + react-fast-marquee: ^1.3.1 + react-merge-refs: ^2.0.1 + react-use-measure: ^2.1.1 + tabbable: ^5.2.1 + tailwindcss: ^3.0.13 + typescript: 4.7.4 + dependencies: + '@radix-ui/react-dropdown-menu': 1.0.0_7ey2zzynotv32rpkwno45fsx4e + '@react-spring/web': 9.5.4_biqbaboplfbrettd7655fr4n2y + '@vercel/commerce': link:../packages/commerce + '@vercel/commerce-bigcommerce': link:../packages/bigcommerce + '@vercel/commerce-commercejs': link:../packages/commercejs + '@vercel/commerce-kibocommerce': link:../packages/kibocommerce + '@vercel/commerce-local': link:../packages/local + '@vercel/commerce-ordercloud': link:../packages/ordercloud + '@vercel/commerce-saleor': link:../packages/saleor + '@vercel/commerce-sfcc': link:../packages/sfcc + '@vercel/commerce-shopify': link:../packages/shopify + '@vercel/commerce-spree': link:../packages/spree + '@vercel/commerce-swell': link:../packages/swell + '@vercel/commerce-vendure': link:../packages/vendure + autoprefixer: 10.4.10_postcss@8.4.16 + body-scroll-lock: 4.0.0-beta.0 + clsx: 1.2.1 + email-validator: 2.0.4 + js-cookie: 3.0.1 + keen-slider: 6.8.0 + lodash.random: 3.2.0 + lodash.throttle: 4.1.1 + next: 13.0.4_biqbaboplfbrettd7655fr4n2y + next-themes: 0.2.1_dcors23iqtgxrhrwosgnnc4xji + postcss: 8.4.16 + postcss-nesting: 10.1.10_postcss@8.4.16 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-fast-marquee: 1.3.5_biqbaboplfbrettd7655fr4n2y + react-merge-refs: 2.0.1 + react-use-measure: 2.1.1_biqbaboplfbrettd7655fr4n2y + tabbable: 5.3.3 + tailwindcss: 3.1.8_postcss@8.4.16 + devDependencies: + '@next/bundle-analyzer': 12.3.0 + '@types/body-scroll-lock': 3.1.0 + '@types/js-cookie': 3.0.2 + '@types/lodash.random': 3.2.7 + '@types/lodash.throttle': 4.1.7 + '@types/node': 18.7.18 + '@types/react': 18.0.20 + '@types/react-dom': 18.0.6 + eslint: 8.23.1 + eslint-config-next: 12.3.0_4brgkhw6cq4me3drk3kxrpb2mm + eslint-config-prettier: 8.5.0_eslint@8.23.1 + lint-staged: 13.0.3 + postcss-flexbugs-fixes: 5.0.2_postcss@8.4.16 + postcss-preset-env: 7.8.1_postcss@8.4.16 + prettier: 2.7.1 + typescript: 4.7.4 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.15 + dev: true + + /@ardatan/relay-compiler/12.0.0_graphql@16.6.0: + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + dependencies: + '@babel/core': 7.20.5 + '@babel/generator': 7.20.5 + '@babel/parser': 7.20.5 + '@babel/runtime': 7.19.0 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + babel-preset-fbjs: 3.4.0_@babel+core@7.20.5 + chalk: 4.1.2 + fb-watchman: 2.0.1 + fbjs: 3.0.4 + glob: 7.2.3 + graphql: 16.6.0 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@ardatan/sync-fetch/0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.20.5: + resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.20.5: + resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.5 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helpers': 7.20.6 + '@babel/parser': 7.20.5 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.20.5: + resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5: + resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.20.5 + '@babel/core': 7.20.5 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.3 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.20.5: + resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@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 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-member-expression-to-functions/7.18.9: + resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-module-transforms/7.20.2: + resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-plugin-utils/7.19.0: + resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-replace-supers/7.18.9: + resolution: {integrity: sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==} + engines: {node: '>=6.9.0'} + 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.20.5 + '@babel/types': 7.20.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers/7.18.9: + resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.18.6: + resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.20.6: + resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.18.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.20.5: + resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.20.5 + dev: true + + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.5 + '@babel/core': 7.20.5 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.5 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.20.5 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.5: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.5: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-classes/7.19.0_@babel+core@7.20.5: + resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.18.9 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.20.5: + resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.20.5: + resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.5 + dev: true + + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.5: + resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-simple-access': 7.20.2 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.18.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.20.5: + resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.5: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.5 + '@babel/types': 7.20.5 + dev: true + + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.5: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.5: + resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + dev: true + + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.5: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/runtime-corejs3/7.19.0: + resolution: {integrity: sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.25.1 + regenerator-runtime: 0.13.9 + dev: true + + /@babel/runtime/7.19.0: + resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + + /@babel/runtime/7.4.5: + resolution: {integrity: sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==} + dependencies: + regenerator-runtime: 0.13.9 + dev: false + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.5 + '@babel/types': 7.20.5 + dev: true + + /@babel/traverse/7.20.5: + resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.5 + '@babel/types': 7.20.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.20.5: + resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: true + + /@cfworker/uuid/1.12.4: + resolution: {integrity: sha512-aw4lxCT4NLbGqlTScWPtPrZrg4TO6HCZCnNUAeC4yTOvkXjJGdJP6S5NCY9vtP2FruLIC+vYCvUP98fHXtF7kg==} + dev: false + + /@chec/commerce.js/2.8.0: + resolution: {integrity: sha512-OPBphT/hU33iDp52zzYOqz/oSXLhEuhGVUg2UNvYtmBW4eCNmtsM0dqW0+wu+6K0d6fZojurCBdVQMKb2R7l3g==} + dependencies: + '@babel/runtime': 7.19.0 + axios: 0.21.4 + transitivePeerDependencies: + - debug + dev: false + + /@commerce-apps/core/1.6.0: + resolution: {integrity: sha512-UpzdT6Tyu6k4a/qGBTYhL8u/M2DbfSuyEdD5PeOCUMJZ8KC/9fu7HyvyM/Tnlini9R9we4YboVcpS5egmpSaWg==} + dependencies: + '@keyv/redis': 2.5.1 + dotenv: 8.6.0 + fetch-to-curl: 0.5.2 + ioredis: 4.28.5 + jsonwebtoken: 8.5.1 + keyv: 4.5.0 + lodash: 4.17.21 + loglevel: 1.8.0 + make-fetch-happen: 8.0.14 + minipass-fetch: 1.4.1 + qs: 6.11.0 + quick-lru: 5.1.1 + retry: 0.13.1 + ssri: 8.0.1 + tslib: 1.14.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: false + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/postcss-cascade-layers/1.0.6_postcss@8.4.16: + resolution: {integrity: sha512-ei4Vh4AJwTCXTNj7uzwduoZDO7nLPksQ0TI7OzUlyFq4P4Uhu6hU7R4AlLimDP/s6D3PQdHmRL4f7UOy370UHA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_pnx64jze6bptzcedy5bidi3zdi + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /@csstools/postcss-color-function/1.1.1_postcss@8.4.16: + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.16: + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.16: + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.16: + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.16: + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_pnx64jze6bptzcedy5bidi3zdi + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.16: + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.16: + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.16: + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.16: + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.16: + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.16: + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.16: + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-unset-value/1.0.2_postcss@8.4.16: + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + dev: true + + /@csstools/selector-specificity/2.0.2_pnx64jze6bptzcedy5bidi3zdi: + resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + postcss-selector-parser: ^6.0.10 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + + /@eslint/eslintrc/1.3.2: + resolution: {integrity: sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.4.0 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@floating-ui/core/0.7.3: + resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} + dev: false + + /@floating-ui/dom/0.5.4: + resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} + dependencies: + '@floating-ui/core': 0.7.3 + dev: false + + /@floating-ui/react-dom/0.7.2_7ey2zzynotv32rpkwno45fsx4e: + resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 0.5.4 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + use-isomorphic-layout-effect: 1.1.2_w5j4k42lgipnm43s3brx6h3c34 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@gar/promisify/1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: false + + /@graphql-codegen/cli/2.12.0_5nhrphdxro5xxa2f5vmz5votda: + resolution: {integrity: sha512-esaMiiuypAtJNiZUhGdFmG0gTMEF5dYkqP/7I04egxSragwbIETU8gOl6/gHdLSAV5su7dgfIEZNdWmGCOWAbg==} + hasBin: true + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/core': 2.6.2_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/apollo-engine-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/code-file-loader': 7.3.6_graphql@16.6.0 + '@graphql-tools/git-loader': 7.2.6_graphql@16.6.0 + '@graphql-tools/github-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/graphql-file-loader': 7.5.5_graphql@16.6.0 + '@graphql-tools/json-file-loader': 7.4.6_graphql@16.6.0 + '@graphql-tools/load': 7.7.7_graphql@16.6.0 + '@graphql-tools/prisma-loader': 7.2.22_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/url-loader': 7.16.2_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@whatwg-node/fetch': 0.3.2 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 7.0.1 + cosmiconfig-typescript-loader: 4.0.0_iiimlhvf2vjl5lw5oj4zqh2xme + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.6.0 + graphql-config: 4.3.5_fte77dov2vin5jxmf6euzzc57i + inquirer: 8.2.4 + is-glob: 4.0.3 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + mkdirp: 1.0.4 + string-env-interpolation: 1.0.1 + ts-log: 2.2.4 + tslib: 2.4.0 + yaml: 1.10.2 + yargs: 17.5.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - enquirer + - supports-color + - ts-node + - typescript + - utf-8-validate + dev: true + + /@graphql-codegen/cli/2.7.0_fte77dov2vin5jxmf6euzzc57i: + resolution: {integrity: sha512-qlBcS6jGfZ/xWXwqiyRLHGRuLC9gUdF8AwGHN7LdAYEP5MjL7pIXb02W5JuvMn47rrvr2Q22H9ECppZX65oSAg==} + hasBin: true + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/core': 2.5.1_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/apollo-engine-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/code-file-loader': 7.3.6_graphql@16.6.0 + '@graphql-tools/git-loader': 7.2.6_graphql@16.6.0 + '@graphql-tools/github-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/graphql-file-loader': 7.5.5_graphql@16.6.0 + '@graphql-tools/json-file-loader': 7.4.6_graphql@16.6.0 + '@graphql-tools/load': 7.7.7_graphql@16.6.0 + '@graphql-tools/prisma-loader': 7.2.22_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/url-loader': 7.16.2_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + change-case-all: 1.0.14 + chokidar: 3.5.3 + common-tags: 1.8.2 + cosmiconfig: 7.0.1 + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.6.0 + graphql-config: 4.3.5_fte77dov2vin5jxmf6euzzc57i + inquirer: 8.2.4 + is-glob: 4.0.3 + json-to-pretty-yaml: 1.2.2 + latest-version: 5.1.0 + listr: 0.14.3 + listr-update-renderer: 0.5.0_listr@0.14.3 + log-symbols: 4.1.0 + mkdirp: 1.0.4 + string-env-interpolation: 1.0.1 + ts-log: 2.2.4 + wrap-ansi: 7.0.0 + yaml: 1.10.2 + yargs: 17.5.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - supports-color + - typescript + - utf-8-validate + - zen-observable + - zenObservable + dev: true + + /@graphql-codegen/cli/2.7.0_gholt4t4onvjnzhsre2mzmeyhy: + resolution: {integrity: sha512-qlBcS6jGfZ/xWXwqiyRLHGRuLC9gUdF8AwGHN7LdAYEP5MjL7pIXb02W5JuvMn47rrvr2Q22H9ECppZX65oSAg==} + hasBin: true + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/core': 2.5.1_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/apollo-engine-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/code-file-loader': 7.3.6_graphql@16.6.0 + '@graphql-tools/git-loader': 7.2.6_graphql@16.6.0 + '@graphql-tools/github-loader': 7.3.13_graphql@16.6.0 + '@graphql-tools/graphql-file-loader': 7.5.5_graphql@16.6.0 + '@graphql-tools/json-file-loader': 7.4.6_graphql@16.6.0 + '@graphql-tools/load': 7.7.7_graphql@16.6.0 + '@graphql-tools/prisma-loader': 7.2.22_c3mutv243l2gduwl4hptzcimie + '@graphql-tools/url-loader': 7.16.2_c3mutv243l2gduwl4hptzcimie + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + change-case-all: 1.0.14 + chokidar: 3.5.3 + common-tags: 1.8.2 + cosmiconfig: 7.0.1 + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.6.0 + graphql-config: 4.3.5_gholt4t4onvjnzhsre2mzmeyhy + inquirer: 8.2.4 + is-glob: 4.0.3 + json-to-pretty-yaml: 1.2.2 + latest-version: 5.1.0 + listr: 0.14.3 + listr-update-renderer: 0.5.0_listr@0.14.3 + log-symbols: 4.1.0 + mkdirp: 1.0.4 + string-env-interpolation: 1.0.1 + ts-log: 2.2.4 + wrap-ansi: 7.0.0 + yaml: 1.10.2 + yargs: 17.5.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - supports-color + - typescript + - utf-8-validate + - zen-observable + - zenObservable + dev: true + + /@graphql-codegen/core/2.5.1_graphql@16.6.0: + resolution: {integrity: sha512-alctBVl2hMnBXDLwkgmnFPrZVIiBDsWJSmxJcM4GKg1PB23+xuov35GE47YAyAhQItE1B1fbYnbb1PtGiDZ4LA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/schema': 8.5.1_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.3.1 + dev: true + + /@graphql-codegen/core/2.6.2_graphql@16.6.0: + resolution: {integrity: sha512-58T5yf9nEfAhDwN1Vz1hImqpdJ/gGpCGUaroQ5tqskZPf7eZYYVkEXbtqRZZLx1MCCKwjWX4hMtTPpHhwKCkng==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/schema': 9.0.4_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-codegen/plugin-helpers/2.7.0_graphql@16.6.0: + resolution: {integrity: sha512-+a2VP/4Ob0fwP8YLrQ/hhYlAA9UZUdDFNqwS543DmyiGFUkNIsa7TnTsE/mBDKJSMsCVWLw78949fCpzjyw/9Q==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + change-case-all: 1.0.14 + common-tags: 1.8.2 + graphql: 16.6.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.0 + dev: true + + /@graphql-codegen/schema-ast/2.5.1_graphql@16.6.0: + resolution: {integrity: sha512-tewa5DEKbglWn7kYyVBkh3J8YQ5ALqAMVmZwiVFIGOao5u66nd+e4HuFqp0u+Jpz4SJGGi0ap/oFrEvlqLjd2A==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-codegen/typescript-operations/2.5.3_graphql@16.6.0: + resolution: {integrity: sha512-s+pA+Erm0HeBb/D5cNrflwRM5KWhkiA5cbz4uA99l3fzFPveoQBPfRCBu0XAlJLP/kBDy64+o4B8Nfc7wdRtmA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-codegen/typescript': 2.7.3_graphql@16.6.0 + '@graphql-codegen/visitor-plugin-common': 2.12.1_graphql@16.6.0 + auto-bind: 4.0.0 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/typescript/2.7.3_graphql@16.6.0: + resolution: {integrity: sha512-EzX/acijXtbG/AwPzho2ZZWaNo00+xAbsRDP+vnT2PwQV3AYq3/5bFvjq1XfAGWbTntdmlYlIwC9hf5bI85WVA==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-codegen/schema-ast': 2.5.1_graphql@16.6.0 + '@graphql-codegen/visitor-plugin-common': 2.12.1_graphql@16.6.0 + auto-bind: 4.0.0 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/visitor-plugin-common/2.12.1_graphql@16.6.0: + resolution: {integrity: sha512-dIUrX4+i/uazyPQqXyQ8cqykgNFe1lknjnfDWFo0gnk2W8+ruuL2JpSrj/7efzFHxbYGMQrCABDCUTVLi3DcVA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.0_graphql@16.6.0 + '@graphql-tools/optimize': 1.3.1_graphql@16.6.0 + '@graphql-tools/relay-operation-optimizer': 6.5.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + auto-bind: 4.0.0 + change-case-all: 1.0.14 + dependency-graph: 0.11.0 + graphql: 16.6.0 + graphql-tag: 2.12.6_graphql@16.6.0 + parse-filepath: 1.0.2 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/apollo-engine-loader/7.3.13_graphql@16.6.0: + resolution: {integrity: sha512-fr2TcA9fM+H81ymdtyDaocZ/Ua4Vhhf1IvpQoPpuEUwLorREd86N8VORUEIBvEdJ1b7Bz7NqwL3RnM5m9KXftA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@whatwg-node/fetch': 0.4.3 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + dev: true + + /@graphql-tools/batch-execute/8.5.6_graphql@16.6.0: + resolution: {integrity: sha512-33vMvVDLBKsNJVNhcySVXF+zkcRL/GRs1Lt+MxygrYCypcAPpFm+amE2y9vOCFufuaKExIX7Lonnmxu19vPzaQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + dataloader: 2.1.0 + graphql: 16.6.0 + tslib: 2.4.0 + value-or-promise: 1.0.11 + dev: true + + /@graphql-tools/code-file-loader/7.3.6_graphql@16.6.0: + resolution: {integrity: sha512-PNWWSwSuQAqANerDwS0zdQ5FPipirv75TjjzBHnY+6AF/WvKq5sQiUQheA2P7B+MZc/KdQ7h/JAGMQOhKNVA+Q==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/graphql-tag-pluck': 7.3.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + globby: 11.1.0 + graphql: 16.6.0 + tslib: 2.4.0 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/delegate/9.0.6_graphql@16.6.0: + resolution: {integrity: sha512-HMA7rcJLQA3dJwWRG2271mRCdh0SLaK5+FPg+F7JIa3aF5fRdN4pVHNDaAjQeyKOQ2afjgjO5FvOyJwv/ve7Bg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-execute': 8.5.6_graphql@16.6.0 + '@graphql-tools/schema': 9.0.4_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + dataloader: 2.1.0 + graphql: 16.6.0 + tslib: 2.4.0 + value-or-promise: 1.0.11 + dev: true + + /@graphql-tools/git-loader/7.2.6_graphql@16.6.0: + resolution: {integrity: sha512-QA94Gjp70xcdIYUbZDIm8fnuDN0IvoIIVVU+lXQemoV+vDeJKIjrP9tfOTjVDPIDXQnCYswvu9HLe8BlEApQYw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/graphql-tag-pluck': 7.3.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + is-glob: 4.0.3 + micromatch: 4.0.5 + tslib: 2.4.0 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/github-loader/7.3.13_graphql@16.6.0: + resolution: {integrity: sha512-4RTjdtdtQC+n9LJMKpBThQGD3LnpeLVjU2A7BoVuKR+NQPJtcUzzuD6dXeYm5RiOMOQUsPGxQWKhJenW20aLUg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/graphql-tag-pluck': 7.3.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@whatwg-node/fetch': 0.4.3 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/graphql-file-loader/7.5.5_graphql@16.6.0: + resolution: {integrity: sha512-OL+7qO1S66TpMK7OGz8Ag2WL08HlxKxrObVSDlxzWbSubWuXM5v959XscYAKRf6daYcVpkfNvO37QjflL9mjhg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/import': 6.7.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + globby: 11.1.0 + graphql: 16.6.0 + tslib: 2.4.0 + unixify: 1.0.0 + dev: true + + /@graphql-tools/graphql-tag-pluck/7.3.6_graphql@16.6.0: + resolution: {integrity: sha512-qULgqsOGKY1/PBqmP7fJZqbCg/TzPHKB9Wl51HGA9QjGymrzmrH5EjvsC8RtgdubF8yuTTVVFTz1lmSQ7RPssQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@babel/parser': 7.20.5 + '@babel/traverse': 7.20.5 + '@babel/types': 7.20.5 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/import/6.7.6_graphql@16.6.0: + resolution: {integrity: sha512-WtUyiO2qCaK/H4u81zAw/NbBvCOzwKl4N+Vl+FqrFCzYobscwL6x6roePyoXM1O3+JJIIn3CETv4kg4kwxaBVw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + resolve-from: 5.0.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/json-file-loader/7.4.6_graphql@16.6.0: + resolution: {integrity: sha512-34AfjCitO4NtJ5AcXYLcFF3GDsMVTycrljSaBA2t1d7B4bMPtREDphKXLMc/Uf2zW6IW1i1sZZyrcmArPy1Z8A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + globby: 11.1.0 + graphql: 16.6.0 + tslib: 2.4.0 + unixify: 1.0.0 + dev: true + + /@graphql-tools/load/7.7.7_graphql@16.6.0: + resolution: {integrity: sha512-IpI2672zcoAX4FLjcH5kvHc7eqjPyLP1svrIcZKQenv0GRS6dW0HI9E5UCBs0y/yy8yW6s+SvpmNsfIlkMj3Kw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/schema': 9.0.4_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + p-limit: 3.1.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/merge/8.3.1_graphql@16.6.0: + resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 8.9.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/merge/8.3.6_graphql@16.6.0: + resolution: {integrity: sha512-uUBokxXi89bj08P+iCvQk3Vew4vcfL5ZM6NTylWi8PIpoq4r5nJ625bRuN8h2uubEdRiH8ntN9M4xkd/j7AybQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/optimize/1.3.1_graphql@16.6.0: + resolution: {integrity: sha512-5j5CZSRGWVobt4bgRRg7zhjPiSimk+/zIuColih8E8DxuFOaJ+t0qu7eZS5KXWBkjcd4BPNuhUPpNlEmHPqVRQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/prisma-loader/7.2.22_c3mutv243l2gduwl4hptzcimie: + resolution: {integrity: sha512-QafvScyyJ9Nvi1r4dmYUBzk1pe5MDwhMQUlJQLIphIPHYP8so8aRHKttoycuMZgQB43uOP+9RpdK0BIPa84/dw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/url-loader': 7.16.2_c3mutv243l2gduwl4hptzcimie + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@types/js-yaml': 4.0.5 + '@types/json-stable-stringify': 1.0.34 + '@types/jsonwebtoken': 8.5.9 + chalk: 4.1.2 + debug: 4.3.4 + dotenv: 16.0.2 + graphql: 16.6.0 + graphql-request: 5.0.0_graphql@16.6.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + isomorphic-fetch: 3.0.0 + js-yaml: 4.1.0 + json-stable-stringify: 1.0.1 + jsonwebtoken: 8.5.1 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.4.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@graphql-tools/prisma-loader/7.2.22_onug3sa4ph53e46o3zvxbixsym: + resolution: {integrity: sha512-QafvScyyJ9Nvi1r4dmYUBzk1pe5MDwhMQUlJQLIphIPHYP8so8aRHKttoycuMZgQB43uOP+9RpdK0BIPa84/dw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/url-loader': 7.16.2_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@types/js-yaml': 4.0.5 + '@types/json-stable-stringify': 1.0.34 + '@types/jsonwebtoken': 8.5.9 + chalk: 4.1.2 + debug: 4.3.4 + dotenv: 16.0.2 + graphql: 16.6.0 + graphql-request: 5.0.0_graphql@16.6.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + isomorphic-fetch: 3.0.0 + js-yaml: 4.1.0 + json-stable-stringify: 1.0.1 + jsonwebtoken: 8.5.1 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.4.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@graphql-tools/relay-operation-optimizer/6.5.6_graphql@16.6.0: + resolution: {integrity: sha512-2KjaWYxD/NC6KtckbDEAbN46QO+74d1SBaZQ26qQjWhyoAjon12xlMW4HWxHEN0d0xuz0cnOVUVc+t4wVXePUg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/relay-compiler': 12.0.0_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/schema/8.5.1_graphql@16.6.0: + resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.3.1_graphql@16.6.0 + '@graphql-tools/utils': 8.9.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + value-or-promise: 1.0.11 + dev: true + + /@graphql-tools/schema/9.0.4_graphql@16.6.0: + resolution: {integrity: sha512-B/b8ukjs18fq+/s7p97P8L1VMrwapYc3N2KvdG/uNThSazRRn8GsBK0Nr+FH+mVKiUfb4Dno79e3SumZVoHuOQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.3.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + value-or-promise: 1.0.11 + dev: true + + /@graphql-tools/url-loader/7.16.2_c3mutv243l2gduwl4hptzcimie: + resolution: {integrity: sha512-ZVG3kDEJ88zLfqYtVmI36RUzaP/0bPBcJfBH8whMYL620tE6kizEQsON8iKsxcU1bWB5D7m9ZVFqW4eZ5EqVWw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 9.0.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@graphql-tools/wrap': 9.2.1_graphql@16.6.0 + '@types/ws': 8.5.3 + '@whatwg-node/fetch': 0.4.3 + dset: 3.1.2 + extract-files: 11.0.0 + graphql: 16.6.0 + graphql-ws: 5.10.2_graphql@16.6.0 + isomorphic-ws: 5.0.0_ws@8.8.1 + meros: 1.2.0_@types+node@18.7.18 + tslib: 2.4.0 + value-or-promise: 1.0.11 + ws: 8.8.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@graphql-tools/url-loader/7.16.2_onug3sa4ph53e46o3zvxbixsym: + resolution: {integrity: sha512-ZVG3kDEJ88zLfqYtVmI36RUzaP/0bPBcJfBH8whMYL620tE6kizEQsON8iKsxcU1bWB5D7m9ZVFqW4eZ5EqVWw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 9.0.6_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + '@graphql-tools/wrap': 9.2.1_graphql@16.6.0 + '@types/ws': 8.5.3 + '@whatwg-node/fetch': 0.4.3 + dset: 3.1.2 + extract-files: 11.0.0 + graphql: 16.6.0 + graphql-ws: 5.10.2_graphql@16.6.0 + isomorphic-ws: 5.0.0_ws@8.8.1 + meros: 1.2.0_@types+node@17.0.45 + tslib: 2.4.0 + value-or-promise: 1.0.11 + ws: 8.8.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@graphql-tools/utils/8.12.0_graphql@16.6.0: + resolution: {integrity: sha512-TeO+MJWGXjUTS52qfK4R8HiPoF/R7X+qmgtOYd8DTH0l6b+5Y/tlg5aGeUJefqImRq7nvi93Ms40k/Uz4D5CWw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/utils/8.9.0_graphql@16.6.0: + resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /@graphql-tools/wrap/9.2.1_graphql@16.6.0: + resolution: {integrity: sha512-W8bzJijTZDNi8e1oM2AMG89CtvfTYaJ9lCe0dYMN+a+OPMhRfgR9+eO7ALcUa9y4MTu+YEDVjUq0ZboaSvesyA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 9.0.6_graphql@16.6.0 + '@graphql-tools/schema': 9.0.4_graphql@16.6.0 + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.0 + value-or-promise: 1.0.11 + dev: true + + /@graphql-typed-document-node/core/3.1.1_graphql@16.6.0: + resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.6.0 + dev: true + + /@humanwhocodes/config-array/0.10.4: + resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/gitignore-to-minimatch/1.0.2: + resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@iarna/toml/2.2.5: + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + dev: true + + /@ioredis/commands/1.2.0: + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + dev: false + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.15 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.15: + resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@keyv/redis/2.5.1: + resolution: {integrity: sha512-DhmMNVYqObPQy23NLYNPZy9do3XSgNmqyTKjwSLWpinD/n0aW64k0hkCfyS1/JH+9zz0mxLTQMtHIgadaZAmDA==} + engines: {node: '>= 12'} + dependencies: + ioredis: 5.2.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@next/bundle-analyzer/12.3.0: + resolution: {integrity: sha512-hzRLHIrtwOiGEku9rmG7qZk+OQhnqQOL+ycl2XrjBaztBN/xaqnjoG4+HEf9L7ELN943BR+K/ZlaF2OEgbGm+Q==} + dependencies: + webpack-bundle-analyzer: 4.3.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@next/env/12.3.0: + resolution: {integrity: sha512-PTJpjAFVbzBQ9xXpzMTroShvD5YDIIy46jQ7d4LrWpY+/5a8H90Tm8hE3Hvkc5RBRspVo7kvEOnqQms0A+2Q6w==} + dev: true + + /@next/env/13.0.4: + resolution: {integrity: sha512-N5Z3bdxBzoxrC5bwykDFITzdWuwDteOdZ+7nxixY+I1XpRX8/iQYbw2wuXMdqdfBGm2NNUpAqg8YF2e4oAC2UQ==} + dev: false + + /@next/env/13.0.6: + resolution: {integrity: sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ==} + dev: true + + /@next/eslint-plugin-next/12.3.0: + resolution: {integrity: sha512-jVdq1qYTNDjUtulnE8/hkPv0pHILV4jMg5La99iaY/FFm20WxVnsAZtbNnMvlPbf8dc010oO304SX9yXbg5PAw==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/swc-android-arm-eabi/12.3.0: + resolution: {integrity: sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@next/swc-android-arm-eabi/13.0.4: + resolution: {integrity: sha512-SD9H+/zuV3L0oHIhsDdFkDqFtg6pIHtqRUPlsrNdOsmWXgMlSzxBmwt2ta4kyrazS62BQu7XRUG++ZyODS7AWg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-android-arm-eabi/13.0.6: + resolution: {integrity: sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@next/swc-android-arm64/12.3.0: + resolution: {integrity: sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@next/swc-android-arm64/13.0.4: + resolution: {integrity: sha512-F8W5WcBbdn/zBoy32/mQiefs9DNsT12CTSSVCsO8GvQR7GjJU+uduQ4drKcSDoDLuAFULc2jDN06Circq4vuQg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-android-arm64/13.0.6: + resolution: {integrity: sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@next/swc-darwin-arm64/12.3.0: + resolution: {integrity: sha512-9s4d3Mhii+WFce8o8Jok7WC3Bawkr9wEUU++SJRptjU1L5tsfYJMrSYCACHLhZujziNDLyExe4Hwwsccps1sfg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@next/swc-darwin-arm64/13.0.4: + resolution: {integrity: sha512-/lajev+9GSie+rRTl5z8skW9RJwZ+TwMKLzzM24TbDk8lUjqPTyJZ/cU0NDj8J7VQAZ6EehACSh9rcJeBRtLuA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-arm64/13.0.6: + resolution: {integrity: sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@next/swc-darwin-x64/12.3.0: + resolution: {integrity: sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@next/swc-darwin-x64/13.0.4: + resolution: {integrity: sha512-HK4b2rFiju8d40GTL/jH9U6OQ7BYA2MeEHs7Dm7Rp7kwQtLzP3z6osdQS8er20tIFHDE4b+oVBy03ZUQkHf0Pg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64/13.0.6: + resolution: {integrity: sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@next/swc-freebsd-x64/12.3.0: + resolution: {integrity: sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@next/swc-freebsd-x64/13.0.4: + resolution: {integrity: sha512-xBvIGLaGzZtgJfRRJ2DBN82DQCJ/O7jkXyBp8X/vHefPWyVXVqF6C68Rv8ADp11thPpf8WpjkvDDLb9AuWHQUA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@next/swc-freebsd-x64/13.0.6: + resolution: {integrity: sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm-gnueabihf/12.3.0: + resolution: {integrity: sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm-gnueabihf/13.0.4: + resolution: {integrity: sha512-s13pxNp9deKmmxEGTp1MoL1e4nf4wbEymEaHgFxUlhoR1OD9tK8oTNrQphQePJgVjzcWmRGH/dX7O9mVkHbU/g==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm-gnueabihf/13.0.6: + resolution: {integrity: sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm64-gnu/12.3.0: + resolution: {integrity: sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm64-gnu/13.0.4: + resolution: {integrity: sha512-Lklo65usNzoYwjX51CpDKOepWVZBdwO49/Jz3djxiYUr2lRtpDVnlfwCvzN+47j3BMVMWtC2ndIi8Q4s3J0v4g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu/13.0.6: + resolution: {integrity: sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm64-musl/12.3.0: + resolution: {integrity: sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-arm64-musl/13.0.4: + resolution: {integrity: sha512-+3BXtXBwjVhd5lahDe5nKZ7EwD6hE/oLFQkITCvgxymU5qYHGlLFyF52/lyw8qhyxoCr7mMVsUFhlCzVwCfNjg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl/13.0.6: + resolution: {integrity: sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-x64-gnu/12.3.0: + resolution: {integrity: sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-x64-gnu/13.0.4: + resolution: {integrity: sha512-QB8qoZrvHhZsz62nUrTKlp5IiZ8I7KZsaa6437H/W/NOZHLGJjCxROnhUjLvKVe/T5P86pjya2SUOUqWAjz4Pg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu/13.0.6: + resolution: {integrity: sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-x64-musl/12.3.0: + resolution: {integrity: sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-linux-x64-musl/13.0.4: + resolution: {integrity: sha512-WaahF6DYUQRg1QqIMcuOu2ZsFhS3aC5iWeQyeptMHklP9wb4FfTNmBArKHknX/GXD8P9gI38WTAHJ25cc0zVwg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl/13.0.6: + resolution: {integrity: sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-arm64-msvc/12.3.0: + resolution: {integrity: sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-arm64-msvc/13.0.4: + resolution: {integrity: sha512-FD+k1j2jeY0aKcqcpzFKfTsv55PPmIZ5GKDyPjjV5AO6XvQ4nALwWl4JwizjH2426TfLXObb+C3MH0bl9Ok1Kw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc/13.0.6: + resolution: {integrity: sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-ia32-msvc/12.3.0: + resolution: {integrity: sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-ia32-msvc/13.0.4: + resolution: {integrity: sha512-+Q/Q8Ydvz3X3U84CyZdNv1HC7fE43k+xB8C6b3IFmWGa5Tu2tfskQ2FsUNBrYreZjhFC/894J3rVQ6Vj6Auugg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc/13.0.6: + resolution: {integrity: sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-x64-msvc/12.3.0: + resolution: {integrity: sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@next/swc-win32-x64-msvc/13.0.4: + resolution: {integrity: sha512-vXtbo9N1FdtZZRcv4BliU28tTYrkb1EnVpUiiFFe88I6kS9aZVTMY9Z/OtDR52rl1JF1hgs9sL/59D/TQqSATQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc/13.0.6: + resolution: {integrity: sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + + /@npmcli/fs/1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.3.7 + dev: false + + /@npmcli/move-file/1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: false + + /@peculiar/asn1-schema/2.3.0: + resolution: {integrity: sha512-DtNLAG4vmDrdSJFPe7rypkcj597chNQL7u+2dBtYo5mh7VW2+im6ke+O0NVr8W1f4re4C3F71LhoMb0Yxqa48Q==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.2 + tslib: 2.4.0 + dev: true + + /@peculiar/json-schema/1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.4.0 + dev: true + + /@peculiar/webcrypto/1.4.0: + resolution: {integrity: sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.0 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.2 + tslib: 2.4.0 + webcrypto-core: 1.7.5 + dev: true + + /@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: true + + /@radix-ui/primitive/1.0.0: + resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + dependencies: + '@babel/runtime': 7.19.0 + dev: false + + /@radix-ui/react-arrow/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-1MUuv24HCdepi41+qfv125EwMuxgQ+U+h0A9K3BjCO/J8nVRREKHHpkD9clwfnjEDk9hgGzCnff4aUKCPiRepw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-collection/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-8i1pf5dKjnq90Z8udnnXKzdCEV3/FYrfw0n/b6NvB6piXEn3fO1bOh7HBcpG8XrnIXzxlYu2oCcR38QpyLS/mg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-slot': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-compose-refs/1.0.0_react@18.2.0: + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-context/1.0.0_react@18.2.0: + resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-direction/1.0.0_react@18.2.0: + resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-dismissable-layer/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + '@radix-ui/react-use-escape-keydown': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-dropdown-menu/1.0.0_7ey2zzynotv32rpkwno45fsx4e: + resolution: {integrity: sha512-Ptben3TxPWrZLbInO7zjAK73kmjYuStsxfg6ujgt+EywJyREoibhZYnsSNqC+UiOtl4PdW/MOHhxVDtew5fouQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-id': 1.0.0_react@18.2.0 + '@radix-ui/react-menu': 1.0.0_7ey2zzynotv32rpkwno45fsx4e + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-controllable-state': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-focus-guards/1.0.0_react@18.2.0: + resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-id/1.0.0_react@18.2.0: + resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-use-layout-effect': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-menu/1.0.0_7ey2zzynotv32rpkwno45fsx4e: + resolution: {integrity: sha512-icW4C64T6nHh3Z4Q1fxO1RlSShouFF4UpUmPV8FLaJZfphDljannKErDuALDx4ClRLihAPZ9i+PrLNPoWS2DMA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-direction': 1.0.0_react@18.2.0 + '@radix-ui/react-dismissable-layer': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-focus-guards': 1.0.0_react@18.2.0 + '@radix-ui/react-focus-scope': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-id': 1.0.0_react@18.2.0 + '@radix-ui/react-popper': 1.0.0_7ey2zzynotv32rpkwno45fsx4e + '@radix-ui/react-portal': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-presence': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-roving-focus': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-slot': 1.0.0_react@18.2.0 + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + aria-hidden: 1.2.1_w5j4k42lgipnm43s3brx6h3c34 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-remove-scroll: 2.5.4_w5j4k42lgipnm43s3brx6h3c34 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-popper/1.0.0_7ey2zzynotv32rpkwno45fsx4e: + resolution: {integrity: sha512-k2dDd+1Wl0XWAMs9ZvAxxYsB9sOsEhrFQV4CINd7IUZf0wfdye4OHen9siwxvZImbzhgVeKTJi68OQmPRvVdMg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@floating-ui/react-dom': 0.7.2_7ey2zzynotv32rpkwno45fsx4e + '@radix-ui/react-arrow': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-layout-effect': 1.0.0_react@18.2.0 + '@radix-ui/react-use-rect': 1.0.0_react@18.2.0 + '@radix-ui/react-use-size': 1.0.0_react@18.2.0 + '@radix-ui/rect': 1.0.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-portal/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-presence/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-use-layout-effect': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-primitive/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-slot': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-roving-focus/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-lHvO4MhvoWpeNbiJAoyDsEtbKqP2jkkdwsMVJ3kfqbkC71J/aXE6Th6gkZA1xHEqSku+t+UgoDjvE7Z3gsBpcg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-direction': 1.0.0_react@18.2.0 + '@radix-ui/react-id': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + '@radix-ui/react-use-controllable-state': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@radix-ui/react-slot/1.0.0_react@18.2.0: + resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref/1.0.0_react@18.2.0: + resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state/1.0.0_react@18.2.0: + resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown/1.0.0_react@18.2.0: + resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect/1.0.0_react@18.2.0: + resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-rect/1.0.0_react@18.2.0: + resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/rect': 1.0.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size/1.0.0_react@18.2.0: + resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.19.0 + '@radix-ui/react-use-layout-effect': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + + /@radix-ui/rect/1.0.0: + resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} + dependencies: + '@babel/runtime': 7.19.0 + dev: false + + /@react-spring/animated/9.5.4_react@18.2.0: + resolution: {integrity: sha512-gYd+xWwcNxEGA9EdORz/xsGsuQmz46FCu7OLIGOZK00fiSkjEM8yTwBQ9i8SUslRAdxTW+POL5OctDpCA6A7xw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/shared': 9.5.4_react@18.2.0 + '@react-spring/types': 9.5.4 + react: 18.2.0 + dev: false + + /@react-spring/core/9.5.4_react@18.2.0: + resolution: {integrity: sha512-ZQxS5+5i6dVWL8mnRbrUMdkT7TfWhdIYYe2ze3my2SNAKC14JjxHxeknX57ywRyudskR1Z9CQjiC8aXX6QBl7w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/animated': 9.5.4_react@18.2.0 + '@react-spring/rafz': 9.5.4 + '@react-spring/shared': 9.5.4_react@18.2.0 + '@react-spring/types': 9.5.4 + react: 18.2.0 + dev: false + + /@react-spring/rafz/9.5.4: + resolution: {integrity: sha512-Tmev2j7sq2FW3ISUClnNS0PhkCsBfPPpkHVMxz8mkIKzMGXWskd0GblOoPVJiWvhbccaX/NYd+ykJqJ1gY0v9g==} + dev: false + + /@react-spring/shared/9.5.4_react@18.2.0: + resolution: {integrity: sha512-22IYmNOzDRP9e5BaQk6T/P2aRxne9uTzGDYuBQCbJpChZypB98xWBMKlVTKdSRG7K4v+F97KFPAKBQzS/k7p5Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/rafz': 9.5.4 + '@react-spring/types': 9.5.4 + react: 18.2.0 + dev: false + + /@react-spring/types/9.5.4: + resolution: {integrity: sha512-dzcGxqL1kPKociXK+pcq5ley77cWDWiphfv8OREv8dAZS1dKDTJq1zVy7ZD5ocyMtKMZw/7AcOdIJ1H80Dp56g==} + dev: false + + /@react-spring/web/9.5.4_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-HoypE3kL/ZUBB81hThE1hB9jYBgJmfeluEOPYoI/wGHyF1q8O0AYpWClvdAbiK3FTESHYZi2m60jwitF7VYUlQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/animated': 9.5.4_react@18.2.0 + '@react-spring/core': 9.5.4_react@18.2.0 + '@react-spring/shared': 9.5.4_react@18.2.0 + '@react-spring/types': 9.5.4 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@rushstack/eslint-patch/1.1.4: + resolution: {integrity: sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==} + dev: true + + /@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7: + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + dependencies: + any-observable: 0.3.0_rxjs@6.6.7 + rxjs: 6.6.7 + transitivePeerDependencies: + - zenObservable + dev: true + + /@sindresorhus/is/0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: true + + /@spree/storefront-api-v2-sdk/5.1.4: + resolution: {integrity: sha512-KvAVQ9wDAy+2EajiEGoFmw3iZRi9xERR/wKS2z+h2BaQsHMEJhe/xh06lFecEu9RKH4/k3m2dqrijyNzWLJ+Gw==} + engines: {node: '>=14.17.0'} + peerDependencies: + axios: ^0.25.0 + node-fetch: ^2.6.6 + peerDependenciesMeta: + axios: + optional: true + node-fetch: + optional: true + dev: false + + /@swc/core-android-arm-eabi/1.3.0: + resolution: {integrity: sha512-1F/U0Vh78ZL7OUlCfaRWCtnYnIfsMA8WDtKyf3UT9b3C0L5HajB9TgMH4c0OKhjfP5Q2/M1/Pm00A+96nhKH8A==} + engines: {node: '>=10'} + cpu: [arm] + os: [android] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.122 + dev: true + optional: true + + /@swc/core-android-arm64/1.3.0: + resolution: {integrity: sha512-dtryoOvQ27s9euAcLinExuaU+mMr8o0N8CBTH3f+JwKjQsIa9v0jPOjJ9jaWktnAdDy/FztB5iBCqTAwbqRG/w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.130 + dev: true + optional: true + + /@swc/core-darwin-arm64/1.3.0: + resolution: {integrity: sha512-WSf29/wneQf5k7mdLKqaSRLDycIZaLATc6m7BKpFi34iCGSvXJfc375OrVG9BS0rReX5LT49XxXp6GQs9oFmVA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@swc/core-darwin-x64/1.3.0: + resolution: {integrity: sha512-eDa1EZAnchMtkdZ52bWfseKla370c8BCj/RWAtHJcZMon3WVkWcZlMgZPPiPIxYz8hGtomqs+pkQv34hEVcx0A==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@swc/core-freebsd-x64/1.3.0: + resolution: {integrity: sha512-ZV9rRmUZqJGCYqnV/3aIJUHELY/MFyABowDN8ijCvN67EjGfoNYx0jpd4hzFWwGC8LohthHNi6hiFfmnvGaKsw==} + engines: {node: '>=10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.130 + dev: true + optional: true + + /@swc/core-linux-arm-gnueabihf/1.3.0: + resolution: {integrity: sha512-3fPWh4SB3lz0ZlQWsHjqZFJK1SIkYqjLpm6mR1jzp/LJx4Oq1baid9CP1eiLd/rijSIgVdUJNMGfiOK9uymEbw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.130 + dev: true + optional: true + + /@swc/core-linux-arm64-gnu/1.3.0: + resolution: {integrity: sha512-CavXNYHKaPTMOvRXh1u7ZfMS5hKDXNSWTdeo+1+2M2XLCP0r0+2Iaeg0IZJD8nIwAlwwP8+rskan2Ekq6jaIfw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-arm64-musl/1.3.0: + resolution: {integrity: sha512-/3UiX8jH+OWleJbqYiwJEf4GQKP6xnm/6gyBt7V0GdhM4/ETMvzTFUNRObgpmxYMhXmNGAlxekU8+0QuAvyRJQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-x64-gnu/1.3.0: + resolution: {integrity: sha512-Ds76Lu7vfE01rgFcf9O1OuNBwQSHBpGwGOKGnwob6T2SCR4DBQz4MD0jLw/tdCZGR8x7NVMteBzQAp3CsUORZw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-x64-musl/1.3.0: + resolution: {integrity: sha512-fgGq/SyX6DsTgJIujBbopaEu17f8u+cyTsJBluc5cF7HxspB4wC72sdq4KGgUoEYObVTgFejnEBZkm8hLOCwYA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-win32-arm64-msvc/1.3.0: + resolution: {integrity: sha512-7B7XggbCmm1oHeNvz5ekWmWmJP/WeGpmGZ10Qca3/zrVm+IRN4ZBT+jpWm+cuuYJh0Llr5UYgTFib3cyOLWkJg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.130 + dev: true + optional: true + + /@swc/core-win32-ia32-msvc/1.3.0: + resolution: {integrity: sha512-vDIu5FjoqB3G7awWCyNsUh5UAzTtJPMEwG75Cwx51fxMPxXrVPHP6XpRovIjQ5wiKL5lGqicckieduJkgBvp7Q==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dependencies: + '@swc/wasm': 1.2.130 + dev: true + optional: true + + /@swc/core-win32-x64-msvc/1.3.0: + resolution: {integrity: sha512-ZEgMvq01Ningz6IOD6ixrpsfA83u+B/1TwnYmWuRl9hMml9lnPwdg3o1P0pwbSO1moKlUhSwc8WVYmI0bXF+gA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@swc/core/1.3.0: + resolution: {integrity: sha512-0mshAzMvdhL0v3lNMJowzMd8Du0bJf+PUTxhVm4uIb/h8qCDQjFERXj0RGejcDFSL7fJzLI3MzS5WR45KDrrLA==} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@swc/core-android-arm-eabi': 1.3.0 + '@swc/core-android-arm64': 1.3.0 + '@swc/core-darwin-arm64': 1.3.0 + '@swc/core-darwin-x64': 1.3.0 + '@swc/core-freebsd-x64': 1.3.0 + '@swc/core-linux-arm-gnueabihf': 1.3.0 + '@swc/core-linux-arm64-gnu': 1.3.0 + '@swc/core-linux-arm64-musl': 1.3.0 + '@swc/core-linux-x64-gnu': 1.3.0 + '@swc/core-linux-x64-musl': 1.3.0 + '@swc/core-win32-arm64-msvc': 1.3.0 + '@swc/core-win32-ia32-msvc': 1.3.0 + '@swc/core-win32-x64-msvc': 1.3.0 + dev: true + + /@swc/helpers/0.4.11: + resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} + dependencies: + tslib: 2.4.0 + + /@swc/helpers/0.4.14: + resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} + dependencies: + tslib: 2.4.0 + dev: true + + /@swc/wasm/1.2.122: + resolution: {integrity: sha512-sM1VCWQxmNhFtdxME+8UXNyPNhxNu7zdb6ikWpz0YKAQQFRGT5ThZgJrubEpah335SUToNg8pkdDF7ibVCjxbQ==} + requiresBuild: true + dev: true + optional: true + + /@swc/wasm/1.2.130: + resolution: {integrity: sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==} + requiresBuild: true + dev: true + optional: true + + /@szmarczak/http-timer/1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: true + + /@taskr/clear/1.1.0: + resolution: {integrity: sha512-QC/zyNneQ5N2kyL4ZmiaMqXxXW7VqwqJssbbdezUs0113Y711I44tXQGKWJnxPVFOe3oGrFGNnkRESPKWq8AYw==} + engines: {node: '>=4.6'} + dependencies: + bluebird: 3.7.2 + rimraf: 2.7.1 + dev: true + + /@taskr/esnext/1.1.0: + resolution: {integrity: sha512-lO9JrkSt2uR/jMZHxHyEZC+K/TvusALewWbgNN3aQaVmPEOevYGNaBlmX7kK2XDNgpL1cWlC1NSVS7PHqMu8Ng==} + dependencies: + require-like: 0.1.2 + rewrite-imports: 1.4.0 + dev: true + + /@taskr/watch/1.1.0: + resolution: {integrity: sha512-CIgNdU4eEPOXn2LeW3voYsHA3vskbqPhYfNWTMvNIUVx4ZJtClQcfEME+MeBzW1xEnGUGMgHTL5jf1V2LmPt3A==} + engines: {node: '>=4.6'} + dependencies: + chokidar: 1.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@tsndr/cloudflare-worker-jwt/2.1.0: + resolution: {integrity: sha512-U8yLexXd7ytstTEp7hEbwQkiMqjxEWz4OfjGju3PhBbNFdi9lH+2kdVB+QQU0g72YjQJZ9UCKzhy0lYzdekLQA==} + dev: false + + /@types/body-scroll-lock/3.1.0: + resolution: {integrity: sha512-3owAC4iJub5WPqRhxd8INarF2bWeQq1yQHBgYhN0XLBJMpd5ED10RrJ3aKiAwlTyL5wK7RkBD4SZUQz2AAAMdA==} + dev: true + + /@types/chec__commerce.js/2.8.5: + resolution: {integrity: sha512-SkQXxm7R/OBiqHEPV33xdqTFdCw5u2H39qZ2YQGSsuDkAyaUpALnaUlrZ06T8UMHSwHrQTXCrDnG8GgzbKwIXg==} + dev: true + + /@types/cookie/0.4.1: + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + dev: true + + /@types/js-cookie/3.0.2: + resolution: {integrity: sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==} + dev: true + + /@types/js-yaml/4.0.5: + resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + dev: true + + /@types/json-stable-stringify/1.0.34: + resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} + dev: true + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/jsonwebtoken/8.5.9: + resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} + dependencies: + '@types/node': 18.7.18 + dev: true + + /@types/keyv/3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 18.7.18 + dev: true + + /@types/lodash.debounce/4.0.7: + resolution: {integrity: sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==} + dependencies: + '@types/lodash': 4.14.185 + dev: true + + /@types/lodash.random/3.2.7: + resolution: {integrity: sha512-gFKkVgWYi1q7RFJ+QNTzaRprdhVIZLpZd6C3MTNehKcujMn9SyFUqf2fTBOmvIYXqNk0RpwfbdOwHf0GnEQB0g==} + dependencies: + '@types/lodash': 4.14.185 + dev: true + + /@types/lodash.throttle/4.1.7: + resolution: {integrity: sha512-znwGDpjCHQ4FpLLx19w4OXDqq8+OvREa05H89obtSyXyOFKL3dDjCslsmfBz0T2FU8dmf5Wx1QvogbINiGIu9g==} + dependencies: + '@types/lodash': 4.14.185 + dev: true + + /@types/lodash/4.14.185: + resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==} + dev: true + + /@types/node-fetch/2.6.2: + resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} + dependencies: + '@types/node': 17.0.45 + form-data: 3.0.1 + dev: true + + /@types/node/17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: true + + /@types/node/18.7.18: + resolution: {integrity: sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + + /@types/react-dom/18.0.6: + resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} + dependencies: + '@types/react': 18.0.20 + dev: true + + /@types/react/18.0.20: + resolution: {integrity: sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + + /@types/responselike/1.0.0: + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + dependencies: + '@types/node': 18.7.18 + dev: true + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + + /@types/uuid/8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: false + + /@types/ws/8.5.3: + resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + dependencies: + '@types/node': 18.7.18 + dev: true + + /@typescript-eslint/parser/5.37.0_4brgkhw6cq4me3drk3kxrpb2mm: + resolution: {integrity: sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.37.0 + '@typescript-eslint/types': 5.37.0 + '@typescript-eslint/typescript-estree': 5.37.0_typescript@4.7.4 + debug: 4.3.4 + eslint: 8.23.1 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.37.0: + resolution: {integrity: sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.37.0 + '@typescript-eslint/visitor-keys': 5.37.0 + dev: true + + /@typescript-eslint/types/5.37.0: + resolution: {integrity: sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.37.0_typescript@4.7.4: + resolution: {integrity: sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.37.0 + '@typescript-eslint/visitor-keys': 5.37.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/visitor-keys/5.37.0: + resolution: {integrity: sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.37.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@vercel/edge/0.0.4: + resolution: {integrity: sha512-KzZuSib25DsYjLa7UiMhAWfhfE9Oby1T90M0mkYMjCNK71i9vvEKRQXnhs3htmyNyid11KyI4wMEnIr7M9DqAA==} + dev: false + + /@whatwg-node/fetch/0.3.2: + resolution: {integrity: sha512-Bs5zAWQs0tXsLa4mRmLw7Psps1EN78vPtgcLpw3qPY8s6UYPUM67zFZ9cy+7tZ64PXhfwzxJn+m7RH2Lq48RNQ==} + dependencies: + '@peculiar/webcrypto': 1.4.0 + abort-controller: 3.0.0 + busboy: 1.6.0 + event-target-polyfill: 0.0.3 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.6.7 + undici: 5.10.0 + web-streams-polyfill: 3.2.1 + transitivePeerDependencies: + - encoding + dev: true + + /@whatwg-node/fetch/0.4.3: + resolution: {integrity: sha512-+NzflVRaWl48Jdjq7FOxkmb8wLpSWtk6XKAEMfr/yDOqJS7HWxA+Rc5rTVqh2IRi6QZJyKGoaGKjOAqrGq07nA==} + dependencies: + '@peculiar/webcrypto': 1.4.0 + abort-controller: 3.0.0 + busboy: 1.6.0 + event-target-polyfill: 0.0.3 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.6.7 + undici: 5.10.0 + web-streams-polyfill: 3.2.1 + transitivePeerDependencies: + - encoding + dev: true + + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + + /acorn-jsx/5.3.2_acorn@8.8.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.0 + dev: true + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: false + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /agentkeepalive/4.2.1: + resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} + engines: {node: '>= 8.0.0'} + dependencies: + debug: 4.3.4 + depd: 1.1.2 + humanize-ms: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-escapes/3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + dev: true + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex/3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles/6.1.1: + resolution: {integrity: sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==} + engines: {node: '>=12'} + dev: true + + /any-observable/0.3.0_rxjs@6.6.7: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + dependencies: + rxjs: 6.6.7 + dev: true + + /anymatch/1.3.2: + resolution: {integrity: sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==} + dependencies: + micromatch: 2.3.11 + normalize-path: 2.1.1 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-hidden/1.2.1_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-PN344VAf9j1EAi+jyVHOJ8XidQdPVssGco39eNcsGdM4wcsILtxrKLkbuiMfLWYROK1FjRQasMWCBttrhjnr6A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.9.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + tslib: 2.4.0 + dev: false + + /aria-query/4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + dependencies: + '@babel/runtime': 7.19.0 + '@babel/runtime-corejs3': 7.19.0 + dev: true + + /arr-diff/2.0.0: + resolution: {integrity: sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + dev: true + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-includes-with-glob/3.1.0: + resolution: {integrity: sha512-/PZEKASyXWmUTkNhuxnmqybv1CmIdY5rp3axLy3Dv6SYfaBb+EgS7Nl991mquHT1N2u0YAnE3IOafVNRM6Y9dw==} + dependencies: + '@babel/runtime': 7.19.0 + matcher: 4.0.0 + dev: false + + /array-includes/3.1.5: + resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + get-intrinsic: 1.1.3 + is-string: 1.0.7 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-unique/0.2.1: + resolution: {integrity: sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==} + engines: {node: '>=0.10.0'} + dev: true + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.flat/1.3.0: + resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap/1.3.0: + resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + es-shim-unscopables: 1.0.0 + dev: true + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /asn1js/3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.2 + pvutils: 1.1.3 + tslib: 2.4.0 + dev: true + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true + + /astral-regex/2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-each/1.0.3: + resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /auto-bind/4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true + + /autoprefixer/10.4.10_postcss@8.4.16: + resolution: {integrity: sha512-nMaiDARyp1e74c8IeAXkr+BmFKa8By4Zak7tyaNPF09Iu39WFpNXOWrVirmXjKr+5cOyERwvtbMOLYz6iBJYgQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.3 + caniuse-lite: 1.0.30001399 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + + /axe-core/4.4.3: + resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==} + engines: {node: '>=4'} + dev: true + + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2 + transitivePeerDependencies: + - debug + dev: false + + /axobject-query/2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + dev: true + + /babel-plugin-dynamic-import-node/2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} + dependencies: + object.assign: 4.1.4 + dev: true + + /babel-plugin-syntax-trailing-function-commas/7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: true + + /babel-preset-fbjs/3.4.0_@babel+core@7.20.5: + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.5 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.20.5 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.5 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.5 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.20.5 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.20.5 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.20.5 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.20.5 + '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.20.5 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.5 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.5 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.5 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.20.5 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.5 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.5 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.20.5 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.5 + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: true + optional: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /body-scroll-lock/4.0.0-beta.0: + resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + dev: false + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /braces/1.8.5: + resolution: {integrity: sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==} + engines: {node: '>=0.10.0'} + dependencies: + expand-range: 1.8.2 + preserve: 0.2.0 + repeat-element: 1.1.4 + dev: true + + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browserslist/4.21.3: + resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001422 + electron-to-chromium: 1.4.249 + node-releases: 2.0.6 + update-browserslist-db: 1.0.9_browserslist@4.21.3 + + /bser/2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: true + + /cacache/15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.4 + 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: 8.0.1 + tar: 6.1.11 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + dev: false + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /cacheable-request/6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.0 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.3 + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.4.0 + dev: true + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite/1.0.30001399: + resolution: {integrity: sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==} + + /caniuse-lite/1.0.30001422: + resolution: {integrity: sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==} + + /capital-case/1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case-first: 2.0.2 + dev: true + + /chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /change-case-all/1.0.14: + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: true + + /change-case/4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /chardet/0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /chokidar/1.7.0: + resolution: {integrity: sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==} + deprecated: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. + dependencies: + anymatch: 1.3.2 + async-each: 1.0.3 + glob-parent: 2.0.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 2.0.1 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + /chownr/2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: false + + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + /cli-cursor/2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + dependencies: + restore-cursor: 2.0.0 + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners/2.7.0: + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + engines: {node: '>=6'} + dev: true + + /cli-truncate/0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + dev: true + + /cli-truncate/2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + + /cli-truncate/3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /cli-width/3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /client-only/0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-response/1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: true + + /clone/1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /clor/5.2.0: + resolution: {integrity: sha512-Z+jjxoF4lNUJQtsdz7d9HLz7yP49hnt4CH76AB7DLusHws14gOlVMl/ShtkMPfoFculqejaiQW5EG2Gt5/cCdg==} + deprecated: 'Clor is now Clorox. Please upgrade: ''npm i clorox''.' + dev: true + + /clsx/1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /cluster-key-slot/1.1.0: + resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==} + engines: {node: '>=0.10.0'} + dev: false + + /code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + + /commander/9.4.0: + resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} + engines: {node: ^12.20.0 || >=14} + dev: true + + /commerce-sdk/2.8.0: + resolution: {integrity: sha512-n9uOUS0WUHO8+qxv9WTmmBukkkInK2+U84+Xx/AZQb3ZBMVZFGK0iK6VAyUJ6y1Ze6KX8U1cCI0VJZ5KPkpImQ==} + dependencies: + '@commerce-apps/core': 1.6.0 + lodash: 4.17.21 + retry: 0.12.0 + tslib: 2.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + dev: false + + /common-tags/1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /constant-case/3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case: 2.0.2 + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /core-js-pure/3.25.1: + resolution: {integrity: sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==} + requiresBuild: true + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig-toml-loader/1.0.0: + resolution: {integrity: sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA==} + dependencies: + '@iarna/toml': 2.2.5 + dev: true + + /cosmiconfig-typescript-loader/4.0.0_7erwhgajjbydxgvliy6verrdiu: + resolution: {integrity: sha512-cVpucSc2Tf+VPwCCR7SZzmQTQkPbkk4O01yXsYqXBIbjE1bhwqSyAgYQkRK1un4i0OPziTleqFhdkmOc4RQ/9g==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=3' + dependencies: + '@types/node': 18.7.18 + cosmiconfig: 7.0.1 + ts-node: 10.9.1_bidgzm5cq2du6gnjtweqqjrrn4 + typescript: 4.8.3 + dev: true + + /cosmiconfig-typescript-loader/4.0.0_iiimlhvf2vjl5lw5oj4zqh2xme: + resolution: {integrity: sha512-cVpucSc2Tf+VPwCCR7SZzmQTQkPbkk4O01yXsYqXBIbjE1bhwqSyAgYQkRK1un4i0OPziTleqFhdkmOc4RQ/9g==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=3' + dependencies: + '@types/node': 17.0.45 + cosmiconfig: 7.0.1 + ts-node: 10.9.1_rb7lfb2dlgdf5f7m6mcvvespxa + typescript: 4.8.3 + dev: true + + /cosmiconfig/7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-fetch/3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-blank-pseudo/3.0.3_postcss@8.4.16: + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /css-has-pseudo/3.0.4_postcss@8.4.16: + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /css-prefers-color-scheme/6.0.3_postcss@8.4.16: + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + dev: true + + /cssdb/7.0.1: + resolution: {integrity: sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /dataloader/2.1.0: + resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} + dev: true + + /date-fns/1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + dev: true + + /debounce/1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /debug/4.3.4_supports-color@9.2.3: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 9.2.3 + dev: true + + /decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decode-uri-component/0.2.0: + resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} + engines: {node: '>=0.10'} + dev: true + + /decompress-response/3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: true + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: false + + /defaults/1.0.3: + resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + dependencies: + clone: 1.0.4 + dev: true + + /defer-to-connect/1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: true + + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: true + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: true + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + + /defined/1.0.0: + resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} + dev: false + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /denque/1.5.1: + resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} + engines: {node: '>=0.10'} + dev: false + + /denque/2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + dev: false + + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /dependency-graph/0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: true + + /detect-indent/6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-node-es/1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.0 + minimist: 1.2.6 + dev: false + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /dotenv/16.0.2: + resolution: {integrity: sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==} + engines: {node: '>=12'} + dev: true + + /dotenv/8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: false + + /dset/3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + dev: true + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /duplexer3/0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: true + + /eastasianwidth/0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + + /electron-to-chromium/1.4.249: + resolution: {integrity: sha512-GMCxR3p2HQvIw47A599crTKYZprqihoBL4lDSAUmr7IYekXFK5t/WgEBrGJDCa2HWIZFQEkGuMqPCi05ceYqPQ==} + + /elegant-spinner/1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + dev: true + + /email-validator/2.0.4: + resolution: {integrity: sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==} + engines: {node: '>4.0'} + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /encoding/0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + dev: false + optional: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /err-code/2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + dev: false + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract/1.20.2: + resolution: {integrity: sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==} + engines: {node: '>= 0.4'} + 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.3 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + is-callable: 1.2.5 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.2 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + string.prototype.trimend: 1.0.5 + string.prototype.trimstart: 1.0.5 + unbox-primitive: 1.0.2 + dev: true + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.5 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-config-next/12.3.0_4brgkhw6cq4me3drk3kxrpb2mm: + resolution: {integrity: sha512-guHSkNyKnTBB8HU35COgAMeMV0E026BiYRYvyEVVaTOeFcnU3i1EI8/Da0Rl7H3Sgua5FEvoA0vYd2s8kdIUXg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 12.3.0 + '@rushstack/eslint-patch': 1.1.4 + '@typescript-eslint/parser': 5.37.0_4brgkhw6cq4me3drk3kxrpb2mm + eslint: 8.23.1 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.7.1_hdzsmr7kawaomymueo2tso6fjq + eslint-plugin-import: 2.26.0_eslint@8.23.1 + eslint-plugin-jsx-a11y: 6.6.1_eslint@8.23.1 + eslint-plugin-react: 7.31.8_eslint@8.23.1 + eslint-plugin-react-hooks: 4.6.0_eslint@8.23.1 + typescript: 4.7.4 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-config-prettier/8.5.0_eslint@8.23.1: + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.23.1 + dev: true + + /eslint-import-resolver-node/0.3.6: + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + dependencies: + debug: 3.2.7 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript/2.7.1_hdzsmr7kawaomymueo2tso6fjq: + resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + eslint: 8.23.1 + eslint-plugin-import: 2.26.0_eslint@8.23.1 + glob: 7.2.3 + is-glob: 4.0.3 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.7.4_oxfrjumrtiktpkw7r2zaom7f74: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + debug: 3.2.7 + eslint: 8.23.1 + eslint-import-resolver-node: 0.3.6 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import/2.26.0_eslint@8.23.1: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: 3.1.5 + array.prototype.flat: 1.3.0 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.23.1 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.4_oxfrjumrtiktpkw7r2zaom7f74 + has: 1.0.3 + is-core-module: 2.10.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.5 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y/6.6.1_eslint@8.23.1: + resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.19.0 + aria-query: 4.2.2 + array-includes: 3.1.5 + ast-types-flow: 0.0.7 + axe-core: 4.4.3 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.23.1 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + semver: 6.3.0 + dev: true + + /eslint-plugin-react-hooks/4.6.0_eslint@8.23.1: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.23.1 + dev: true + + /eslint-plugin-react/7.31.8_eslint@8.23.1: + resolution: {integrity: sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.5 + array.prototype.flatmap: 1.3.0 + doctrine: 2.1.0 + eslint: 8.23.1 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.hasown: 1.1.1 + object.values: 1.1.5 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.7 + dev: true + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.23.1: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.23.1 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.23.1: + resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.2 + '@humanwhocodes/config-array': 0.10.4 + '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + '@humanwhocodes/module-importer': 1.0.1 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.23.1 + eslint-visitor-keys: 3.3.0 + espree: 9.4.0 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.17.0 + globby: 11.1.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-sdsl: 4.1.4 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.4.0: + resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.0 + acorn-jsx: 5.3.2_acorn@8.8.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /event-target-polyfill/0.0.3: + resolution: {integrity: sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==} + dev: true + + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa/6.1.0: + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + 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 + dev: true + + /expand-brackets/0.1.5: + resolution: {integrity: sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==} + engines: {node: '>=0.10.0'} + dependencies: + is-posix-bracket: 0.1.1 + dev: true + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /expand-range/1.8.2: + resolution: {integrity: sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==} + engines: {node: '>=0.10.0'} + dependencies: + fill-range: 2.2.4 + dev: true + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /external-editor/3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /extglob/0.3.2: + resolution: {integrity: sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 1.0.0 + dev: true + + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extract-files/11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: true + + /extract-files/9.0.0: + resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} + engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + + /fb-watchman/2.0.1: + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + dependencies: + bser: 2.1.1 + dev: true + + /fbjs-css-vars/1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: true + + /fbjs/3.0.4: + resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} + dependencies: + cross-fetch: 3.1.5 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 0.7.31 + transitivePeerDependencies: + - encoding + dev: true + + /fetch-to-curl/0.5.2: + resolution: {integrity: sha512-ygmvsJlU+V4GE91lflkRNAJ956xm5MFl6QukIyxkd6yojTxr6gjp4BsYh7hYXlwVw+ffnMlAIXOTWsWJdk017Q==} + dev: false + + /figures/1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + dev: true + + /figures/2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + optional: true + + /filename-regex/2.0.1: + resolution: {integrity: sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==} + engines: {node: '>=0.10.0'} + dev: true + + /fill-range/2.2.4: + resolution: {integrity: sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 2.1.0 + isobject: 2.1.0 + randomatic: 3.1.1 + repeat-element: 1.1.4 + repeat-string: 1.6.1 + dev: true + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /for-own/0.1.5: + resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + dev: true + + /form-data-encoder/1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + dev: true + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /formdata-node/4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + dev: true + + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fs-minipass/2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.4 + dev: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.16.0 + dev: true + optional: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic/1.1.3: + resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + + /get-nonce/1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + + /get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + dev: true + + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /glob-base/0.3.0: + resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==} + engines: {node: '>=0.10.0'} + dependencies: + glob-parent: 2.0.0 + is-glob: 2.0.1 + dev: true + + /glob-parent/2.0.0: + resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==} + dependencies: + is-glob: 2.0.1 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /got/9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: true + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphql-config/4.3.5_fte77dov2vin5jxmf6euzzc57i: + resolution: {integrity: sha512-B4jXhHL7j3llCem+ACeo48wvVYhtJxRyt5SfSnvywbRlVYyUzt5ibZV6WJU2Yii2/rcVRIGi7BHDgcAPWdWdJg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/graphql-file-loader': 7.5.5_graphql@16.6.0 + '@graphql-tools/json-file-loader': 7.4.6_graphql@16.6.0 + '@graphql-tools/load': 7.7.7_graphql@16.6.0 + '@graphql-tools/merge': 8.3.6_graphql@16.6.0 + '@graphql-tools/url-loader': 7.16.2_onug3sa4ph53e46o3zvxbixsym + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + cosmiconfig: 7.0.1 + cosmiconfig-toml-loader: 1.0.0 + cosmiconfig-typescript-loader: 4.0.0_iiimlhvf2vjl5lw5oj4zqh2xme + graphql: 16.6.0 + minimatch: 4.2.1 + string-env-interpolation: 1.0.1 + ts-node: 10.9.1_rb7lfb2dlgdf5f7m6mcvvespxa + tslib: 2.4.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - typescript + - utf-8-validate + dev: true + + /graphql-config/4.3.5_gholt4t4onvjnzhsre2mzmeyhy: + resolution: {integrity: sha512-B4jXhHL7j3llCem+ACeo48wvVYhtJxRyt5SfSnvywbRlVYyUzt5ibZV6WJU2Yii2/rcVRIGi7BHDgcAPWdWdJg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/graphql-file-loader': 7.5.5_graphql@16.6.0 + '@graphql-tools/json-file-loader': 7.4.6_graphql@16.6.0 + '@graphql-tools/load': 7.7.7_graphql@16.6.0 + '@graphql-tools/merge': 8.3.6_graphql@16.6.0 + '@graphql-tools/url-loader': 7.16.2_c3mutv243l2gduwl4hptzcimie + '@graphql-tools/utils': 8.12.0_graphql@16.6.0 + cosmiconfig: 7.0.1 + cosmiconfig-toml-loader: 1.0.0 + cosmiconfig-typescript-loader: 4.0.0_7erwhgajjbydxgvliy6verrdiu + graphql: 16.6.0 + minimatch: 4.2.1 + string-env-interpolation: 1.0.1 + ts-node: 10.9.1_bidgzm5cq2du6gnjtweqqjrrn4 + tslib: 2.4.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - typescript + - utf-8-validate + dev: true + + /graphql-request/5.0.0_graphql@16.6.0: + resolution: {integrity: sha512-SpVEnIo2J5k2+Zf76cUkdvIRaq5FMZvGQYnA4lUWYbc99m+fHh4CZYRRO/Ff4tCLQ613fzCm3SiDT64ubW5Gyw==} + peerDependencies: + graphql: 14 - 16 + dependencies: + '@graphql-typed-document-node/core': 3.1.1_graphql@16.6.0 + cross-fetch: 3.1.5 + extract-files: 9.0.0 + form-data: 3.0.1 + graphql: 16.6.0 + transitivePeerDependencies: + - encoding + dev: true + + /graphql-tag/2.12.6_graphql@16.6.0: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.6.0 + tslib: 2.4.0 + dev: true + + /graphql-ws/5.10.2_graphql@16.6.0: + resolution: {integrity: sha512-QnLz0hbpTkmp/ATKAA3Tsg9LFZjWtgrLMgxc3W9G+3+rxUtzcYLwQh4YbXELYcpCqo8zdQxmERAtIQSgq75LTw==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 16.6.0 + dev: true + + /graphql/16.6.0: + resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.3 + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /header-case/2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.4.0 + dev: true + + /http-cache-semantics/4.1.0: + resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals/3.0.1: + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} + dev: true + + /humanize-ms/1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + + /husky/8.0.1: + resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + optional: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /immutability-helper/3.1.1: + resolution: {integrity: sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==} + dev: false + + /immutable/3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + dev: true + + /import-cwd/3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: false + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from/3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: false + + /import-from/4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string/3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + /infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: false + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /inquirer/8.2.4: + resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.5.6 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /internal-slot/1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.3 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /invariant/2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + + /ioredis/4.28.5: + resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} + engines: {node: '>=6'} + dependencies: + cluster-key-slot: 1.1.0 + debug: 4.3.4 + denque: 1.5.1 + 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 + transitivePeerDependencies: + - supports-color + dev: false + + /ioredis/5.2.3: + resolution: {integrity: sha512-gQNcMF23/NpvjCaa1b5YycUyQJ9rBNH2xP94LWinNpodMWVUPP5Ai/xXANn/SM7gfIvI62B5CCvZxhg5pOgyMw==} + engines: {node: '>=12.22.0'} + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.0 + debug: 4.3.4 + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /ip/2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + dev: false + + /is-absolute/1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: 1.13.1 + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-callable/1.2.5: + resolution: {integrity: sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true + + /is-dotfile/1.0.3: + resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-equal-shallow/0.1.3: + resolution: {integrity: sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==} + engines: {node: '>=0.10.0'} + dependencies: + is-primitive: 2.0.0 + dev: true + + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob/1.0.0: + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point/4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-glob/2.0.1: + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 1.0.0 + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-interactive/1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-lambda/1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + dev: false + + /is-lower-case/2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + dependencies: + tslib: 2.4.0 + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number/2.1.0: + resolution: {integrity: sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number/4.0.0: + resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-observable/1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + dependencies: + symbol-observable: 1.2.0 + dev: true + + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-posix-bracket/0.1.1: + resolution: {integrity: sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-primitive/2.0.0: + resolution: {integrity: sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-promise/2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-relative/1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream/1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-unc-path/1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-upper-case/2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + dependencies: + tslib: 2.4.0 + dev: true + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /isomorphic-fetch/3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + dependencies: + node-fetch: 2.6.7 + whatwg-fetch: 3.6.2 + transitivePeerDependencies: + - encoding + + /isomorphic-ws/5.0.0_ws@8.8.1: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.8.1 + dev: true + + /js-cookie/3.0.1: + resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==} + engines: {node: '>=12'} + dev: false + + /js-sdsl/4.1.4: + resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==} + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer/3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: true + + /json-buffer/3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stable-stringify/1.0.1: + resolution: {integrity: sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==} + dependencies: + jsonify: 0.0.0 + dev: true + + /json-to-pretty-yaml/1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + dependencies: + remedial: 1.0.8 + remove-trailing-spaces: 1.0.8 + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonify/0.0.0: + resolution: {integrity: sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==} + dev: true + + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.5 + object.assign: 4.1.4 + dev: true + + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + /keen-slider/6.8.0: + resolution: {integrity: sha512-7xzjGqf4+Kralaf5KFzZWWvKEPNgkNSPafv2BTigFhTX+iOG0Nzw+caPxlsw5jxG/IpS/SWmcUWS5QLdxAs7tQ==} + dev: false + + /keyv/3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: true + + /keyv/4.5.0: + resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} + dependencies: + json-buffer: 3.0.1 + dev: false + + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /latest-version/5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + dependencies: + package-json: 6.5.0 + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig/2.0.5: + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} + engines: {node: '>=10'} + dev: true + + /lilconfig/2.0.6: + resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + engines: {node: '>=10'} + dev: false + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lint-staged/12.5.0: + resolution: {integrity: sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.19 + commander: 9.4.0 + debug: 4.3.4_supports-color@9.2.3 + execa: 5.1.1 + lilconfig: 2.0.5 + listr2: 4.0.5 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-inspect: 1.12.2 + pidtree: 0.5.0 + string-argv: 0.3.1 + supports-color: 9.2.3 + yaml: 1.10.2 + transitivePeerDependencies: + - enquirer + dev: true + + /lint-staged/13.0.3: + resolution: {integrity: sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.19 + commander: 9.4.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 + object-inspect: 1.12.2 + pidtree: 0.6.0 + string-argv: 0.3.1 + yaml: 2.1.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr-silent-renderer/1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + dev: true + + /listr-update-renderer/0.5.0_listr@0.14.3: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + dev: true + + /listr-verbose-renderer/0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + dev: true + + /listr/0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + dependencies: + '@samverschueren/stream-to-observable': 0.3.1_rxjs@6.6.7 + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0_listr@0.14.3 + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.7 + transitivePeerDependencies: + - zen-observable + - zenObservable + dev: true + + /listr2/4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.19 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.5.6 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.camelcase/4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: false + + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false + + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.defaults/4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: false + + /lodash.flatten/4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: false + + /lodash.includes/4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + /lodash.isarguments/3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + dev: false + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + /lodash.isdate/4.0.1: + resolution: {integrity: sha512-hg5B1GD+R9egsBgMwmAhk+V53Us03TVvXT4dnyKugEfsD4QKuG9Wlyvxq8OGy2nu7qVGsh4DRSnMk33hoWBq/Q==} + dev: false + + /lodash.isinteger/4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + /lodash.isstring/4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.once/4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + /lodash.random/3.2.0: + resolution: {integrity: sha512-A6Vn7teN0+qSnhOsE8yx2bGowCS1G7D9e5abq8VhwOP98YHS/KrGMf43yYxA05lvcvloT+W9Z2ffkSajFTcPUA==} + dev: false + + /lodash.snakecase/4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: false + + /lodash.throttle/4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: false + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols/1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + dependencies: + chalk: 1.1.3 + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /log-update/2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + dev: true + + /log-update/4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + + /loglevel/1.8.0: + resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} + engines: {node: '>= 0.6.0'} + dev: false + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lower-case-first/2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + dependencies: + tslib: 2.4.0 + dev: true + + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.4.0 + dev: true + + /lowercase-keys/1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: true + + /lowercase-keys/2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /make-fetch-happen/8.0.14: + resolution: {integrity: sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==} + engines: {node: '>= 10'} + dependencies: + agentkeepalive: 4.2.1 + cacache: 15.3.0 + http-cache-semantics: 4.1.0 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.4 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + promise-retry: 2.0.1 + socks-proxy-agent: 5.0.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: false + + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /matcher/4.0.0: + resolution: {integrity: sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: false + + /math-random/1.0.4: + resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==} + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /meros/1.2.0_@types+node@17.0.45: + resolution: {integrity: sha512-3QRZIS707pZQnijHdhbttXRWwrHhZJ/gzolneoxKVz9N/xmsvY/7Ls8lpnI9gxbgxjcHsAVEW3mgwiZCo6kkJQ==} + engines: {node: '>=12'} + peerDependencies: + '@types/node': '>=12' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 17.0.45 + dev: true + + /meros/1.2.0_@types+node@18.7.18: + resolution: {integrity: sha512-3QRZIS707pZQnijHdhbttXRWwrHhZJ/gzolneoxKVz9N/xmsvY/7Ls8lpnI9gxbgxjcHsAVEW3mgwiZCo6kkJQ==} + engines: {node: '>=12'} + peerDependencies: + '@types/node': '>=12' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 18.7.18 + dev: true + + /micromatch/2.3.11: + resolution: {integrity: sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 2.0.0 + array-unique: 0.2.1 + braces: 1.8.5 + expand-brackets: 0.1.5 + extglob: 0.3.2 + filename-regex: 2.0.1 + is-extglob: 1.0.0 + is-glob: 2.0.1 + kind-of: 3.2.2 + normalize-path: 2.1.1 + object.omit: 2.0.1 + parse-glob: 3.0.4 + regex-cache: 0.4.4 + dev: true + + /micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mimic-fn/1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn/4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /mimic-response/1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch/4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + + /minipass-collect/1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.4 + dev: false + + /minipass-fetch/1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.4 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: false + + /minipass-flush/1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.4 + dev: false + + /minipass-pipeline/1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.4 + dev: false + + /minipass-sized/1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.4 + dev: false + + /minipass/3.3.4: + resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: false + + /minizlib/2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.4 + yallist: 4.0.0 + dev: false + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mk-dirs/1.0.0: + resolution: {integrity: sha512-VUhC7/wotZwooobTlBl5+ZAgHoLCdckDqGz9HqdiXeYIXeATKWiiuas4HIjzOs3/qIstv+3e0u/lYYbXACIbOQ==} + engines: {node: '>=4'} + dev: true + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /mrmime/1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /nan/2.16.0: + resolution: {integrity: sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==} + dev: true + optional: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /next-themes/0.2.1_dcors23iqtgxrhrwosgnnc4xji: + resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} + peerDependencies: + next: '*' + react: '*' + react-dom: '*' + dependencies: + next: 13.0.4_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /next/12.3.0_672uxklweod7ene3nqtsh262ca: + resolution: {integrity: sha512-GpzI6me9V1+XYtfK0Ae9WD0mKqHyzQlGq1xH1rzNIYMASo4Tkl4rTe9jSqtBpXFhOS33KohXs9ZY38Akkhdciw==} + engines: {node: '>=12.22.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 12.3.0 + '@swc/helpers': 0.4.11 + caniuse-lite: 1.0.30001399 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + styled-jsx: 5.0.6_zavbqmrropwrojvx6ojaa4s7im + use-sync-external-store: 1.2.0_react@18.2.0 + optionalDependencies: + '@next/swc-android-arm-eabi': 12.3.0 + '@next/swc-android-arm64': 12.3.0 + '@next/swc-darwin-arm64': 12.3.0 + '@next/swc-darwin-x64': 12.3.0 + '@next/swc-freebsd-x64': 12.3.0 + '@next/swc-linux-arm-gnueabihf': 12.3.0 + '@next/swc-linux-arm64-gnu': 12.3.0 + '@next/swc-linux-arm64-musl': 12.3.0 + '@next/swc-linux-x64-gnu': 12.3.0 + '@next/swc-linux-x64-musl': 12.3.0 + '@next/swc-win32-arm64-msvc': 12.3.0 + '@next/swc-win32-ia32-msvc': 12.3.0 + '@next/swc-win32-x64-msvc': 12.3.0 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: true + + /next/13.0.4_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-4P0MvbjPCI1E/UPL1GrTXtYlgFnbBbY3JQ+AMY8jYE2SwyvCWctEJySoRjveznAHjrl6TIjuAJeB8u1c2StYUQ==} + engines: {node: '>=14.6.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.0.4 + '@swc/helpers': 0.4.11 + caniuse-lite: 1.0.30001422 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + styled-jsx: 5.1.0_react@18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 + optionalDependencies: + '@next/swc-android-arm-eabi': 13.0.4 + '@next/swc-android-arm64': 13.0.4 + '@next/swc-darwin-arm64': 13.0.4 + '@next/swc-darwin-x64': 13.0.4 + '@next/swc-freebsd-x64': 13.0.4 + '@next/swc-linux-arm-gnueabihf': 13.0.4 + '@next/swc-linux-arm64-gnu': 13.0.4 + '@next/swc-linux-arm64-musl': 13.0.4 + '@next/swc-linux-x64-gnu': 13.0.4 + '@next/swc-linux-x64-musl': 13.0.4 + '@next/swc-win32-arm64-msvc': 13.0.4 + '@next/swc-win32-ia32-msvc': 13.0.4 + '@next/swc-win32-x64-msvc': 13.0.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /next/13.0.6_672uxklweod7ene3nqtsh262ca: + resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} + engines: {node: '>=14.6.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.0.6 + '@swc/helpers': 0.4.14 + caniuse-lite: 1.0.30001422 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + styled-jsx: 5.1.0_zavbqmrropwrojvx6ojaa4s7im + optionalDependencies: + '@next/swc-android-arm-eabi': 13.0.6 + '@next/swc-android-arm64': 13.0.6 + '@next/swc-darwin-arm64': 13.0.6 + '@next/swc-darwin-x64': 13.0.6 + '@next/swc-freebsd-x64': 13.0.6 + '@next/swc-linux-arm-gnueabihf': 13.0.6 + '@next/swc-linux-arm64-gnu': 13.0.6 + '@next/swc-linux-arm64-musl': 13.0.6 + '@next/swc-linux-x64-gnu': 13.0.6 + '@next/swc-linux-x64-musl': 13.0.6 + '@next/swc-win32-arm64-msvc': 13.0.6 + '@next/swc-win32-ia32-msvc': 13.0.6 + '@next/swc-win32-x64-msvc': 13.0.6 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: true + + /next/13.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} + engines: {node: '>=14.6.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.0.6 + '@swc/helpers': 0.4.14 + caniuse-lite: 1.0.30001422 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + styled-jsx: 5.1.0_react@18.2.0 + optionalDependencies: + '@next/swc-android-arm-eabi': 13.0.6 + '@next/swc-android-arm64': 13.0.6 + '@next/swc-darwin-arm64': 13.0.6 + '@next/swc-darwin-x64': 13.0.6 + '@next/swc-freebsd-x64': 13.0.6 + '@next/swc-linux-arm-gnueabihf': 13.0.6 + '@next/swc-linux-arm64-gnu': 13.0.6 + '@next/swc-linux-arm64-musl': 13.0.6 + '@next/swc-linux-x64-gnu': 13.0.6 + '@next/swc-linux-x64-musl': 13.0.6 + '@next/swc-win32-arm64-msvc': 13.0.6 + '@next/swc-win32-ia32-msvc': 13.0.6 + '@next/swc-win32-x64-msvc': 13.0.6 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: true + + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.4.0 + dev: true + + /node-domexception/1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-int64/0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + + /normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + /normalize-url/4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path/5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nullthrows/1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: true + + /number-is-nan/1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect/1.12.2: + resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + + /object-keys-normalizer/1.0.1: + resolution: {integrity: sha512-bQk7HLUK9UxmOlniNcwaESebtOM7i8eJhTnqDQCwkukVA72XRnO0RIvs+a5EIJsH8tWEK9m96NryugxdXQ6AXg==} + dependencies: + lodash.camelcase: 4.3.0 + lodash.snakecase: 4.1.1 + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object-merge-advanced/12.0.3: + resolution: {integrity: sha512-xQIf2Vup1rpKiHr2tQca5jyNYgT4O0kNxOfAp3ZNonm2hS+5yaJgI0Czdk/QMy52bcRwQKX3uc3H8XtAiiYfVA==} + dependencies: + '@babel/runtime': 7.19.0 + array-includes-with-glob: 3.1.0 + lodash.clonedeep: 4.5.0 + lodash.includes: 4.3.0 + lodash.isdate: 4.0.1 + lodash.isplainobject: 4.0.6 + lodash.uniq: 4.5.0 + util-nonempty: 3.1.0 + dev: false + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries/1.1.5: + resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /object.fromentries/2.0.5: + resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /object.hasown/1.1.1: + resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} + dependencies: + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /object.omit/2.0.1: + resolution: {integrity: sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==} + engines: {node: '>=0.10.0'} + dependencies: + for-own: 0.1.5 + is-extendable: 0.1.1 + dev: true + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.values/1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime/2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + dependencies: + mimic-fn: 1.2.0 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime/6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /opener/1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /ora/5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.7.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-cancelable/1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map/2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /package-json/6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.2 + registry-url: 5.1.0 + semver: 6.3.0 + dev: true + + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-filepath/1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: true + + /parse-glob/3.0.4: + resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==} + engines: {node: '>=0.10.0'} + dependencies: + glob-base: 0.3.0 + is-dotfile: 1.0.3 + is-extglob: 1.0.0 + is-glob: 2.0.1 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.18.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-case/3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key/4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-root-regex/0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: true + + /path-root/0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pidtree/0.5.0: + resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pidtree/0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.16: + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-clamp/4.1.0_postcss@8.4.16: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-functional-notation/4.2.4_postcss@8.4.16: + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-hex-alpha/8.0.4_postcss@8.4.16: + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-rebeccapurple/7.1.1_postcss@8.4.16: + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-media/8.0.2_postcss@8.4.16: + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-properties/12.1.8_postcss@8.4.16: + resolution: {integrity: sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-selectors/6.0.3_postcss@8.4.16: + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-dir-pseudo-class/6.0.5_postcss@8.4.16: + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-double-position-gradients/3.1.2_postcss@8.4.16: + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-env-function/4.0.6_postcss@8.4.16: + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-flexbugs-fixes/5.0.2_postcss@8.4.16: + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-focus-visible/6.0.4_postcss@8.4.16: + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-focus-within/5.0.4_postcss@8.4.16: + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-font-variant/5.0.0_postcss@8.4.16: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-gap-properties/3.0.5_postcss@8.4.16: + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-image-set-function/4.0.7_postcss@8.4.16: + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-import/14.1.0_postcss@8.4.16: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: false + + /postcss-initial/4.0.1_postcss@8.4.16: + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-js/4.0.0_postcss@8.4.16: + resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.3.3 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.16 + dev: false + + /postcss-lab-function/4.2.1_postcss@8.4.16: + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-load-config/3.1.4_postcss@8.4.16: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.6 + postcss: 8.4.16 + yaml: 1.10.2 + dev: false + + /postcss-logical/5.0.4_postcss@8.4.16: + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-media-minmax/5.0.0_postcss@8.4.16: + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-nested/5.0.6_postcss@8.4.16: + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-nesting/10.1.10_postcss@8.4.16: + resolution: {integrity: sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_pnx64jze6bptzcedy5bidi3zdi + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + + /postcss-opacity-percentage/1.1.2: + resolution: {integrity: sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==} + engines: {node: ^12 || ^14 || >=16} + dev: true + + /postcss-overflow-shorthand/3.0.4_postcss@8.4.16: + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-page-break/3.0.4_postcss@8.4.16: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-place/7.0.5_postcss@8.4.16: + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-preset-env/7.8.1_postcss@8.4.16: + resolution: {integrity: sha512-8884CHxQaoN1i4iEK+JvzOe8emODb5R4p/0dw4yEdo7QM4RdUk2sBx0fnzFyJt8BLfZSCGeVkKZ4HC564waBpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.0.6_postcss@8.4.16 + '@csstools/postcss-color-function': 1.1.1_postcss@8.4.16 + '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.16 + '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.16 + '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.16 + '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.16 + '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.16 + '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.16 + '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.16 + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.16 + '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.16 + '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.16 + '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.16 + '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.16 + autoprefixer: 10.4.10_postcss@8.4.16 + browserslist: 4.21.3 + css-blank-pseudo: 3.0.3_postcss@8.4.16 + css-has-pseudo: 3.0.4_postcss@8.4.16 + css-prefers-color-scheme: 6.0.3_postcss@8.4.16 + cssdb: 7.0.1 + postcss: 8.4.16 + postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.16 + postcss-clamp: 4.1.0_postcss@8.4.16 + postcss-color-functional-notation: 4.2.4_postcss@8.4.16 + postcss-color-hex-alpha: 8.0.4_postcss@8.4.16 + postcss-color-rebeccapurple: 7.1.1_postcss@8.4.16 + postcss-custom-media: 8.0.2_postcss@8.4.16 + postcss-custom-properties: 12.1.8_postcss@8.4.16 + postcss-custom-selectors: 6.0.3_postcss@8.4.16 + postcss-dir-pseudo-class: 6.0.5_postcss@8.4.16 + postcss-double-position-gradients: 3.1.2_postcss@8.4.16 + postcss-env-function: 4.0.6_postcss@8.4.16 + postcss-focus-visible: 6.0.4_postcss@8.4.16 + postcss-focus-within: 5.0.4_postcss@8.4.16 + postcss-font-variant: 5.0.0_postcss@8.4.16 + postcss-gap-properties: 3.0.5_postcss@8.4.16 + postcss-image-set-function: 4.0.7_postcss@8.4.16 + postcss-initial: 4.0.1_postcss@8.4.16 + postcss-lab-function: 4.2.1_postcss@8.4.16 + postcss-logical: 5.0.4_postcss@8.4.16 + postcss-media-minmax: 5.0.0_postcss@8.4.16 + postcss-nesting: 10.1.10_postcss@8.4.16 + postcss-opacity-percentage: 1.1.2 + postcss-overflow-shorthand: 3.0.4_postcss@8.4.16 + postcss-page-break: 3.0.4_postcss@8.4.16 + postcss-place: 7.0.5_postcss@8.4.16 + postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.16 + postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.16 + postcss-selector-not: 6.0.1_postcss@8.4.16 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.16: + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.16: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.16 + dev: true + + /postcss-selector-not/6.0.1_postcss@8.4.16: + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /postcss/8.4.16: + resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prepend-http/2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: true + + /preserve/0.2.0: + resolution: {integrity: sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==} + engines: {node: '>=0.10.0'} + dev: true + + /prettier/2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /promise-inflight/1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: false + + /promise-retry/2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: false + + /promise/7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: true + + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /pvtsutils/1.3.2: + resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} + dependencies: + tslib: 2.4.0 + dev: true + + /pvutils/1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: true + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /qs/6.7.0: + resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} + engines: {node: '>=0.6'} + dev: false + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /randomatic/3.1.1: + resolution: {integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==} + engines: {node: '>= 0.10.0'} + dependencies: + is-number: 4.0.0 + kind-of: 6.0.3 + math-random: 1.0.4 + dev: true + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.6 + strip-json-comments: 2.0.1 + dev: true + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + + /react-fast-marquee/1.3.5_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-eOqLoz4iVVBvi2wN/web8hd2XX9y2Z6CYR7g++7nTVHlTOXBtqyARQJ9rYNpbp179hAzloMx0yBFAo8LpNYmKQ==} + peerDependencies: + react: '>= 16.8.0 || 18.0.0' + react-dom: '>= 16.8.0 || 18.0.0' + dependencies: + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /react-merge-refs/2.0.1: + resolution: {integrity: sha512-pywF6oouJWuqL26xV3OruRSIqai31R9SdJX/I3gP2q8jLxUnA1IwXcLW8werUHLZOrp4N7YOeQNZrh/BKrHI4A==} + dev: false + + /react-remove-scroll-bar/2.3.3_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-i9GMNWwpz8XpUpQ6QlevUtFjHGqnPG4Hxs+wlIJntu/xcsZVEpJcIV71K3ZkqNy2q3GfgvkD7y6t/Sv8ofYSbw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + react-style-singleton: 2.2.1_w5j4k42lgipnm43s3brx6h3c34 + tslib: 2.4.0 + dev: false + + /react-remove-scroll/2.5.4_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + react-remove-scroll-bar: 2.3.3_w5j4k42lgipnm43s3brx6h3c34 + react-style-singleton: 2.2.1_w5j4k42lgipnm43s3brx6h3c34 + tslib: 2.4.0 + use-callback-ref: 1.3.0_w5j4k42lgipnm43s3brx6h3c34 + use-sidecar: 1.1.2_w5j4k42lgipnm43s3brx6h3c34 + dev: false + + /react-style-singleton/2.2.1_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.4.0 + dev: false + + /react-use-measure/2.1.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==} + peerDependencies: + react: '>=16.13' + react-dom: '>=16.13' + dependencies: + debounce: 1.2.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + + /read-cache/1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.10 + micromatch: 3.1.10 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /redis-commands/1.7.0: + resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} + dev: false + + /redis-errors/1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + dev: false + + /redis-parser/3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + dependencies: + redis-errors: 1.2.0 + dev: false + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + + /regex-cache/0.4.4: + resolution: {integrity: sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-equal-shallow: 0.1.3 + dev: true + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + functions-have-names: 1.2.3 + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /registry-auth-token/4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + dependencies: + rc: 1.2.8 + dev: true + + /registry-url/5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + dependencies: + rc: 1.2.8 + dev: true + + /relay-runtime/12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + dependencies: + '@babel/runtime': 7.19.0 + fbjs: 3.0.4 + invariant: 2.2.4 + transitivePeerDependencies: + - encoding + dev: true + + /remedial/1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + dev: true + + /remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /remove-trailing-spaces/1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + dev: true + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-like/0.1.2: + resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + dev: true + + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /responselike/1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: true + + /restore-cursor/2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: false + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rewrite-imports/1.4.0: + resolution: {integrity: sha512-k4pGuRsZ6UMSLW4mxpKVxqvGAwXCC81ZnLD+o+S9/7b3+fZ/pguNLHZpZ7qgi/5AmtqzuzppInhaARBjjDquOA==} + engines: {node: '>=4'} + dev: true + + /rfdc/1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true + + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /run-async/2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rxjs/6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /rxjs/7.5.6: + resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==} + dependencies: + tslib: 2.4.0 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + + /scuid/1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /sentence-case/3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case-first: 2.0.2 + dev: true + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + object-inspect: 1.12.2 + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signedsource/1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + dev: true + + /sirv/1.0.19: + resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.1 + totalist: 1.1.0 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi/0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + dev: true + + /slice-ansi/3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.1.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /smart-buffer/4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /snake-case/3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /socks-proxy-agent/5.0.1: + resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.0 + transitivePeerDependencies: + - supports-color + dev: false + + /socks/2.7.0: + resolution: {integrity: sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /sponge-case/1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + dependencies: + tslib: 2.4.0 + dev: true + + /ssri/8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.4 + dev: false + + /standard-as-callback/2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + dev: false + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true + + /string-argv/0.3.1: + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} + dev: true + + /string-env-interpolation/1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + dev: true + + /string-width/1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width/2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.0.1 + dev: true + + /string.prototype.matchall/4.0.7: + resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + get-intrinsic: 1.1.3 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + dev: true + + /string.prototype.trimend/1.0.5: + resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /string.prototype.trimstart/1.0.5: + resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.2 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi/4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline/3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /styled-jsx/5.0.6_zavbqmrropwrojvx6ojaa4s7im: + resolution: {integrity: sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.20.5 + react: 18.2.0 + dev: true + + /styled-jsx/5.1.0_react@18.2.0: + resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + + /styled-jsx/5.1.0_zavbqmrropwrojvx6ojaa4s7im: + resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.20.5 + client-only: 0.0.1 + react: 18.2.0 + dev: true + + /supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color/9.2.3: + resolution: {integrity: sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==} + engines: {node: '>=12'} + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /swap-case/2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + dependencies: + tslib: 2.4.0 + dev: true + + /swell-js/4.0.0-next.0: + resolution: {integrity: sha512-OQ1FLft3ruKpQw5P0TiCzs/X2Ma95+Qz+I2Xzs4KC6v+zVaFVUGNs80dQdtjfInisWoFC7iFZF2AITgellVGAg==} + dependencies: + '@babel/runtime': 7.4.5 + deepmerge: 4.2.2 + isomorphic-fetch: 3.0.0 + lodash: 4.17.21 + object-keys-normalizer: 1.0.1 + object-merge-advanced: 12.0.3 + qs: 6.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /swr/1.3.0_react@18.2.0: + resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /symbol-observable/1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: true + + /tabbable/5.3.3: + resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} + dev: false + + /tailwindcss/3.1.8_postcss@8.4.16: + resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.6 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.16 + postcss-import: 14.1.0_postcss@8.4.16 + postcss-js: 4.0.0_postcss@8.4.16 + postcss-load-config: 3.1.4_postcss@8.4.16 + postcss-nested: 5.0.6_postcss@8.4.16 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: false + + /tar/6.1.11: + resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} + engines: {node: '>= 10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.3.4 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: false + + /taskr/1.1.0: + resolution: {integrity: sha512-jELUxxTfAxR6ZRFV6S/8LRcNg/GnlhS/4x2WZjGDkfle9Bk+M/e8LutMy3GVeUcp1cJc8Oy/uuroqbDePLHunQ==} + engines: {node: '>= 4.6'} + hasBin: true + dependencies: + bluebird: 3.7.2 + clor: 5.2.0 + glob: 7.2.3 + mk-dirs: 1.0.0 + mri: 1.2.0 + tinydate: 1.3.0 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tinydate/1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + dev: true + + /title-case/3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + dependencies: + tslib: 2.4.0 + dev: true + + /tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-readable-stream/1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: true + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /totalist/1.1.0: + resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + engines: {node: '>=6'} + dev: true + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /ts-log/2.2.4: + resolution: {integrity: sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ==} + dev: true + + /ts-node/10.9.1_bidgzm5cq2du6gnjtweqqjrrn4: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.7.18 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-node/10.9.1_rb7lfb2dlgdf5f7m6mcvvespxa: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 17.0.45 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.6 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + /tsutils/3.21.0_typescript@4.7.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.7.4 + dev: true + + /turbo-android-arm64/1.4.6: + resolution: {integrity: sha512-YxSlHc64CF5J7yNUMiLBHkeLyzrpe75Oy7tivWb3z7ySG44BXPikk4HDJZPh0T1ELvukDwuPKkvDukJ2oCLJpA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-64/1.4.6: + resolution: {integrity: sha512-f6uto7LLpjwZ6iZSF+8uaDpuiTji6xmnWDxNuW23DBE8iv5mxehHd+6Ys851uKDRrPb3QdCu9ctyigKTAla5Vg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64/1.4.6: + resolution: {integrity: sha512-o9C6e5XyuMHQwE0fEhUxfpXxvNr2QXXWX8nxIjygxeF19AqKbk/s08vZBOEmXV6/gx/pRhZ1S2nf0PIUjKBD/Q==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-freebsd-64/1.4.6: + resolution: {integrity: sha512-Gg9VOUo6McXYKGevcYjGUSmMryZyZggvpdPh7Dw3QTcT8Tsy6OBtq6WnJ2O4kFDsMigyKtEOJPceD9vDMZt3yQ==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /turbo-freebsd-arm64/1.4.6: + resolution: {integrity: sha512-W7VrcneWFN1QENKt5cpAPSsf9ArYBBAm3VtPBZEO5tX8kuahGlah1SKdKJXrRxYOY82wyNxDagS/rHpBlrAAzw==} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-32/1.4.6: + resolution: {integrity: sha512-76j/zsui6mWPX8pZVMGgF8eiKHPmKuGa2lo0A/Ja0HUvdYCOGUfHsWJGVVIeYbuEp3jsKyVt7OnMDeH9CqO6bg==} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64/1.4.6: + resolution: {integrity: sha512-z4A37Xm7lZyO9ddtGnvQHWMrsAKX6vFBxdbtb9MY76VRblo7lWSuk4LwCeM+T+ZDJ9LBFiF7aD/diRShlLx9jA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm/1.4.6: + resolution: {integrity: sha512-Uh/V3oaAdhyZW6FKPpKihAxQo3EbvLaVNnzzkBmBnvHRkqoDJHhpuG72V7nn8pzxVbJ1++NEVjvbc2kmKFvGjg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64/1.4.6: + resolution: {integrity: sha512-FW1jmOpZfOoVVvml338N0MPnYjiMyYWTaMb4T+IosgGYymcUE3xJjfXJcqfU/9/uKTyY8zG0qr9/5rw2kpMS2Q==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-mips64le/1.4.6: + resolution: {integrity: sha512-iWaL3Pwj52BH3T2M8nXScmbSnq4+x47MYK7lJMG7FsZGAIoT5ToO1Wt1iX3GRHTcnIZYm/kCfJ1ptK/NCossLA==} + cpu: [mipsel] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-ppc64le/1.4.6: + resolution: {integrity: sha512-Af/KlUmpiORDyELxT7byXNWl3fefErGQMJfeqXEtAdhs8OCKQWuU+lchcZbiBZYNpL+lZoa3PAmP9Fpx7R4plA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-32/1.4.6: + resolution: {integrity: sha512-NBd+XPlRSaR//lVN13Q9DOqK3CbowSvafIyGsO4jfvMsGTdyNDL6AYtFsvTKW91/G7ZhATmSEkPn2pZRuhP/DA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64/1.4.6: + resolution: {integrity: sha512-86AbmG+CjzVTpn4RGtwU2CYy4zSyAc9bIQ4pDGLIpCJg6JlD11duaiMJh0SCU/HCqWLJjWDI4qD+f9WNbgPsyQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64/1.4.6: + resolution: {integrity: sha512-V+pWcqhTtmQQ3ew8qEjYtUwzyW6tO1RgvP+6OKzItYzTnMTr1Fe42Q21V+tqRNxuNfFDKsgVJdk2p5wB87bvyQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo/1.4.6: + resolution: {integrity: sha512-FKtBXlOJ7YjSK22yj4sJLCtDcHFElypt7xw9cZN7Wyv9x4XBrTmh5KP6RmcGnRR1/GJlTNwD2AY2T9QTPnHh+g==} + hasBin: true + requiresBuild: true + optionalDependencies: + turbo-android-arm64: 1.4.6 + turbo-darwin-64: 1.4.6 + turbo-darwin-arm64: 1.4.6 + turbo-freebsd-64: 1.4.6 + turbo-freebsd-arm64: 1.4.6 + turbo-linux-32: 1.4.6 + turbo-linux-64: 1.4.6 + turbo-linux-arm: 1.4.6 + turbo-linux-arm64: 1.4.6 + turbo-linux-mips64le: 1.4.6 + turbo-linux-ppc64le: 1.4.6 + turbo-windows-32: 1.4.6 + turbo-windows-64: 1.4.6 + turbo-windows-arm64: 1.4.6 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /typescript/4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/4.8.3: + resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /ua-parser-js/0.7.31: + resolution: {integrity: sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==} + dev: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unc-path-regex/0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /undici/5.10.0: + resolution: {integrity: sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==} + engines: {node: '>=12.18'} + dev: true + + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: false + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: false + + /unixify/1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: true + + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /update-browserslist-db/1.0.9_browserslist@4.21.3: + resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.3 + escalade: 3.1.1 + picocolors: 1.0.0 + + /upper-case-first/2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.4.0 + dev: true + + /upper-case/2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.4.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /url-parse-lax/3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: true + + /use-callback-ref/1.3.0_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + tslib: 2.4.0 + dev: false + + /use-isomorphic-layout-effect/1.1.2_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + dev: false + + /use-sidecar/1.1.2_w5j4k42lgipnm43s3brx6h3c34: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.4.0 + dev: false + + /use-sync-external-store/1.2.0_react@18.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util-nonempty/3.1.0: + resolution: {integrity: sha512-OSZlWoCL74Go83Qw/aeZgSmFZnp9d06bF77b1eAOKipkPWhvxjRYB2nmKiGspoVjkJJEJimzxAgBFUQiUV/oZQ==} + dependencies: + '@babel/runtime': 7.19.0 + lodash.isplainobject: 4.0.6 + dev: false + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /uuidv4/6.2.13: + resolution: {integrity: sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ==} + dependencies: + '@types/uuid': 8.3.4 + uuid: 8.3.2 + dev: false + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /value-or-promise/1.0.11: + resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} + engines: {node: '>=12'} + dev: true + + /wcwidth/1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.3 + dev: true + + /web-streams-polyfill/3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /web-streams-polyfill/4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + dev: true + + /webcrypto-core/1.7.5: + resolution: {integrity: sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==} + dependencies: + '@peculiar/asn1-schema': 2.3.0 + '@peculiar/json-schema': 1.1.12 + asn1js: 3.0.5 + pvtsutils: 1.3.2 + tslib: 2.4.0 + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /webpack-bundle-analyzer/4.3.0: + resolution: {integrity: sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==} + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + acorn: 8.8.0 + acorn-walk: 8.2.0 + chalk: 4.1.2 + commander: 6.2.1 + gzip-size: 6.0.0 + lodash: 4.17.21 + opener: 1.5.2 + sirv: 1.0.19 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /whatwg-fetch/3.6.2: + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module/2.0.0: + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi/3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + dev: true + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /ws/7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws/8.8.1: + resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml-ast-parser/0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + /yaml/2.1.1: + resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + + /yargs/17.5.1: + resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zod/3.19.1: + resolution: {integrity: sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==} + dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..6add2bd5c --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'site' + - 'packages/*' diff --git a/site/.npmrc b/site/.npmrc new file mode 100644 index 000000000..fa4e09523 --- /dev/null +++ b/site/.npmrc @@ -0,0 +1 @@ +strict-peer-dependencies=false \ No newline at end of file diff --git a/site/assets/base.css b/site/assets/base.css index 37e14196c..85c0277c5 100644 --- a/site/assets/base.css +++ b/site/assets/base.css @@ -119,3 +119,9 @@ a { opacity: 1; } } + +@media not all and (min-resolution: 0.001dpcm) { + img[loading='lazy'] { + clip-path: inset(0.5px); + } +} diff --git a/site/components/auth/LoginView.tsx b/site/components/auth/LoginView.tsx index 3c8faef7c..c30f71834 100644 --- a/site/components/auth/LoginView.tsx +++ b/site/components/auth/LoginView.tsx @@ -1,4 +1,4 @@ -import { FC, useEffect, useState, useCallback } from 'react' +import { useEffect, useState, useCallback } from 'react' import { Logo, Button, Input } from '@components/ui' import useLogin from '@framework/auth/use-login' import { useUI } from '@components/ui/context' @@ -31,19 +31,22 @@ const LoginView: React.FC = () => { email, password, }) - setLoading(false) closeModal() - } catch (e: any) { - setMessage(e.errors[0].message) - setLoading(false) + } catch ({ errors }) { + if (errors instanceof Array) { + setMessage(errors.map((e: any) => e.message).join('
')) + } else { + setMessage('Unexpected error') + } setDisabled(false) + } finally { + setLoading(false) } } const handleValidation = useCallback(() => { // Test for Alphanumeric password const validPassword = /^(?=.*[a-zA-Z])(?=.*[0-9])/.test(password) - // Unable to send form unless fields are valid. if (dirty) { setDisabled(!validate(email) || password.length < 7 || !validPassword) diff --git a/site/components/auth/SignUpView.tsx b/site/components/auth/SignUpView.tsx index a85a3bc27..cc6c629be 100644 --- a/site/components/auth/SignUpView.tsx +++ b/site/components/auth/SignUpView.tsx @@ -38,10 +38,16 @@ const SignUpView: FC = () => { lastName, password, }) - setLoading(false) closeModal() } catch ({ errors }) { - setMessage(errors[0].message) + console.error(errors) + if (errors instanceof Array) { + setMessage(errors.map((e: any) => e.message).join('
')) + } else { + setMessage('Unexpected error') + } + setDisabled(false) + } finally { setLoading(false) } } @@ -70,7 +76,12 @@ const SignUpView: FC = () => {

{message && ( -
{message}
+
)} diff --git a/site/components/cart/CartItem/CartItem.module.css b/site/components/cart/CartItem/CartItem.module.css index dd43314fb..5816e66ce 100644 --- a/site/components/cart/CartItem/CartItem.module.css +++ b/site/components/cart/CartItem/CartItem.module.css @@ -17,13 +17,7 @@ } .productImage { - position: absolute; - transform: scale(1.9); - width: 100%; - height: 100%; - left: 30% !important; - top: 30% !important; - z-index: 1; + @apply w-full h-full object-cover; } .productName { diff --git a/site/components/cart/CartItem/CartItem.tsx b/site/components/cart/CartItem/CartItem.tsx index 1fd3cfa3b..666b1a4ca 100644 --- a/site/components/cart/CartItem/CartItem.tsx +++ b/site/components/cart/CartItem/CartItem.tsx @@ -1,4 +1,4 @@ -import { ChangeEvent, FocusEventHandler, useEffect, useState } from 'react' +import { ChangeEvent, useEffect, useState } from 'react' import cn from 'clsx' import Image from 'next/image' import Link from 'next/link' @@ -88,31 +88,26 @@ const CartItem = ({ {...rest} >
-
+
- - closeSidebarIfPresent()} - className={s.productImage} - width={150} - height={150} - src={item.variant.image?.url || placeholderImg} - alt={item.variant.image?.altText || 'Product Image'} - unoptimized - /> - + closeSidebarIfPresent()} + className={s.productImage} + width={64} + height={64} + src={item.variant.image?.url || placeholderImg} + alt={item.variant.image?.alt || 'Product Image'} + />
- - closeSidebarIfPresent()} - > - {item.name} - - + closeSidebarIfPresent()} + > + {item.name} + {options && options.length > 0 && (
diff --git a/site/components/cart/CartSidebarView/CartSidebarView.tsx b/site/components/cart/CartSidebarView/CartSidebarView.tsx index 327602c0b..2198615cd 100644 --- a/site/components/cart/CartSidebarView/CartSidebarView.tsx +++ b/site/components/cart/CartSidebarView/CartSidebarView.tsx @@ -74,11 +74,9 @@ const CartSidebarView: FC = () => { <>
- - - My Cart - - + + My Cart +
    {data!.lineItems.map((item: any) => ( diff --git a/site/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx b/site/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx index 43966523d..e03c2db00 100644 --- a/site/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx +++ b/site/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx @@ -64,9 +64,7 @@ const CheckoutSidebarView: FC = () => { >
    - - Checkout - + Checkout { } } -export const CheckoutProvider: FC = (props) => { +export const CheckoutProvider: FC<{ children?: ReactNode }> = (props) => { const [state, dispatch] = useReducer(checkoutReducer, initialState) const setCardFields = useCallback( diff --git a/site/components/common/Footer/Footer.tsx b/site/components/common/Footer/Footer.tsx index 18e9b4027..8a7936fdf 100644 --- a/site/components/common/Footer/Footer.tsx +++ b/site/components/common/Footer/Footer.tsx @@ -7,6 +7,7 @@ import getSlug from '@lib/get-slug' import { Github, Vercel } from '@components/icons' import { Logo, Container } from '@components/ui' import { I18nWidget } from '@components/common' +import ThemeSwitcher from '@components/ui/ThemeSwitcher' import s from './Footer.module.css' interface Props { @@ -31,30 +32,34 @@ const Footer: FC = ({ className, pages }) => {
    - - - - - - ACME - + + + + + ACME
    -
    +
    {[...links, ...sitePages].map((page) => ( - - - {page.name} - + + {page.name} ))}
    -
    - diff --git a/site/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx b/site/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx index 0a40bff2e..e442b725e 100644 --- a/site/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx +++ b/site/components/common/HomeAllProductsGrid/HomeAllProductsGrid.tsx @@ -5,10 +5,11 @@ import { Grid } from '@components/ui' import { ProductCard } from '@components/product' import s from './HomeAllProductsGrid.module.css' import { getCategoryPath, getDesignerPath } from '@lib/search' +import { Brand, Category } from '@commerce/types/site' interface Props { - categories?: any - brands?: any + categories?: Category[] + brands?: Brand[] products?: Product[] } @@ -23,29 +24,21 @@ const HomeAllProductsGrid: FC = ({
    • - - All Categories - + All Categories
    • - {categories.map((cat: any) => ( + {categories?.map((cat: any) => (
    • - - {cat.name} - + {cat.name}
    • ))}
    • - - All Designers - + All Designers
    • - {brands.flatMap(({ node }: any) => ( -
    • - - {node.name} - + {brands?.map(({ path, name }) => ( +
    • + {name}
    • ))}
    @@ -59,6 +52,7 @@ const HomeAllProductsGrid: FC = ({ product={product} variant="simple" imgProps={{ + alt: product.name, width: 480, height: 480, }} diff --git a/site/components/common/I18nWidget/I18nWidget.module.css b/site/components/common/I18nWidget/I18nWidget.module.css index 5b486d537..a3c19babb 100644 --- a/site/components/common/I18nWidget/I18nWidget.module.css +++ b/site/components/common/I18nWidget/I18nWidget.module.css @@ -3,7 +3,7 @@ } .button { - @apply h-10 px-2 rounded-md border border-accent-2 flex items-center justify-center transition-colors ease-linear; + @apply h-10 pl-2 pr-1 rounded-md border border-accent-2 flex items-center justify-center transition-colors ease-linear; } .button:hover { @@ -32,7 +32,7 @@ } .icon.active { - transform: rotate(180deg); + transform: rotate(90deg); } @screen lg { diff --git a/site/components/common/I18nWidget/I18nWidget.tsx b/site/components/common/I18nWidget/I18nWidget.tsx index d09dd1d6d..013c68f9a 100644 --- a/site/components/common/I18nWidget/I18nWidget.tsx +++ b/site/components/common/I18nWidget/I18nWidget.tsx @@ -3,8 +3,9 @@ import Link from 'next/link' import { FC, useState } from 'react' import { useRouter } from 'next/router' import s from './I18nWidget.module.css' -import { Cross, ChevronUp } from '@components/icons' +import { Cross, ChevronRight } from '@components/icons' import ClickOutside from '@lib/click-outside' +import Image from 'next/image' interface LOCALE_DATA { name: string img: { @@ -50,16 +51,17 @@ const I18nWidget: FC = () => { onClick={() => setDisplay(!display)} > @@ -79,13 +81,13 @@ const I18nWidget: FC = () => {
      {options.map((locale) => (
    • - - setDisplay(false)} - > - {LOCALES_MAP[locale].name} - + setDisplay(false)} + > + {LOCALES_MAP[locale].name}
    • ))} diff --git a/site/components/common/Layout/Layout.tsx b/site/components/common/Layout/Layout.tsx index c59a495f4..5d1170281 100644 --- a/site/components/common/Layout/Layout.tsx +++ b/site/components/common/Layout/Layout.tsx @@ -55,6 +55,7 @@ interface Props { categories: Category[] navigation: Navigation[] } + children?: React.ReactNode } const ModalView: React.FC<{ modalView: string; closeModal(): any }> = ({ diff --git a/site/components/common/Navbar/Navbar.tsx b/site/components/common/Navbar/Navbar.tsx index 1b5419fab..b834de36c 100644 --- a/site/components/common/Navbar/Navbar.tsx +++ b/site/components/common/Navbar/Navbar.tsx @@ -23,22 +23,20 @@ const Navbar: FC = ({ links, customNavigation }) => (
      - - - - + +
      + + ) +} + +export default ThemeSwitcher diff --git a/site/components/ui/ThemeSwitcher/index.ts b/site/components/ui/ThemeSwitcher/index.ts new file mode 100644 index 000000000..2b4931135 --- /dev/null +++ b/site/components/ui/ThemeSwitcher/index.ts @@ -0,0 +1 @@ +export { default } from './ThemeSwitcher' diff --git a/site/components/ui/context.tsx b/site/components/ui/context.tsx index ca2bfd7ed..0a89a0a05 100644 --- a/site/components/ui/context.tsx +++ b/site/components/ui/context.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useMemo } from 'react' +import React, { FC, ReactNode, useCallback, useMemo } from 'react' import { ThemeProvider } from 'next-themes' export interface State { @@ -124,7 +124,7 @@ function uiReducer(state: State, action: Action) { } } -export const UIProvider: FC = (props) => { +export const UIProvider: FC<{ children?: ReactNode }> = (props) => { const [state, dispatch] = React.useReducer(uiReducer, initialState) const openSidebar = useCallback( @@ -195,6 +195,7 @@ export const UIProvider: FC = (props) => { setSidebarView, setUserAvatar, }), + // eslint-disable-next-line react-hooks/exhaustive-deps [state] ) @@ -209,7 +210,9 @@ export const useUI = () => { return context } -export const ManagedUIContext: FC = ({ children }) => ( +export const ManagedUIContext: FC<{ children?: ReactNode }> = ({ + children, +}) => ( {children} diff --git a/site/components/wishlist/WishlistButton/WishlistButton.tsx b/site/components/wishlist/WishlistButton/WishlistButton.tsx index f4e0fb31f..72767f843 100644 --- a/site/components/wishlist/WishlistButton/WishlistButton.tsx +++ b/site/components/wishlist/WishlistButton/WishlistButton.tsx @@ -30,9 +30,7 @@ const WishlistButton: FC = ({ // @ts-ignore Wishlist is not always enabled const itemInWishlist = data?.items?.find( // @ts-ignore Wishlist is not always enabled - (item) => - item.product_id === Number(productId) && - item.variant_id === Number(variant.id) + (item) => item.productId === productId && item.variantId === variant.id ) const handleWishlistChange = async (e: any) => { diff --git a/site/components/wishlist/WishlistCard/WishlistCard.tsx b/site/components/wishlist/WishlistCard/WishlistCard.tsx index 6af6c914e..07114dd6a 100644 --- a/site/components/wishlist/WishlistCard/WishlistCard.tsx +++ b/site/components/wishlist/WishlistCard/WishlistCard.tsx @@ -11,14 +11,15 @@ import type { Product } from '@commerce/types/product' import usePrice from '@framework/product/use-price' import useAddItem from '@framework/cart/use-add-item' import useRemoveItem from '@framework/wishlist/use-remove-item' -import type { Wishlist } from '@commerce/types/wishlist' +import type { WishlistItem } from '@commerce/types/wishlist' const placeholderImg = '/product-img-placeholder.svg' const WishlistCard: React.FC<{ - item: Wishlist + item: WishlistItem }> = ({ item }) => { const product: Product = item.product + const { price } = usePrice({ amount: product.price?.value, baseAmount: product.price?.retailPrice, @@ -73,9 +74,7 @@ const WishlistCard: React.FC<{

      - - {product.name} - + {product.name}

      diff --git a/site/lib/api/commerce.ts b/site/lib/api/commerce.ts index 499137004..db81f6543 100644 --- a/site/lib/api/commerce.ts +++ b/site/lib/api/commerce.ts @@ -1,3 +1,2 @@ import { getCommerceApi } from '@framework/api' - export default getCommerceApi() diff --git a/site/lib/click-outside/click-outside.tsx b/site/lib/click-outside/click-outside.tsx index 973345b07..d6172904a 100644 --- a/site/lib/click-outside/click-outside.tsx +++ b/site/lib/click-outside/click-outside.tsx @@ -6,14 +6,16 @@ import React, { ReactElement, forwardRef, Ref, + ReactNode, } from 'react' -import mergeRefs from 'react-merge-refs' +import { mergeRefs } from 'react-merge-refs' import hasParent from './has-parent' interface ClickOutsideProps { active: boolean onClick: (e?: MouseEvent) => void ref?: Ref + children?: ReactNode } /** diff --git a/site/lib/focus-trap.tsx b/site/lib/focus-trap.tsx index d886d6df2..7f37a8c9f 100644 --- a/site/lib/focus-trap.tsx +++ b/site/lib/focus-trap.tsx @@ -53,6 +53,7 @@ export default function FocusTrap({ children, focusFirst = false }: Props) { return () => { returnFocus() } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [root, children]) return React.createElement( diff --git a/site/lib/hooks/useToggleTheme.ts b/site/lib/hooks/useToggleTheme.ts new file mode 100644 index 000000000..563af6533 --- /dev/null +++ b/site/lib/hooks/useToggleTheme.ts @@ -0,0 +1,11 @@ +import { useTheme } from 'next-themes' +import { useEffect, useState } from 'react' + +export const useToggleTheme = () => { + const { theme, themes, setTheme } = useTheme() + const [themeValue, setThemeValue] = useState('system') + + useEffect(() => setThemeValue(theme), [theme]) + + return { theme: themeValue, setTheme, themes } +} diff --git a/site/lib/hooks/useUserAvatar.ts b/site/lib/hooks/useUserAvatar.ts index 840daae6d..08cd2763f 100644 --- a/site/lib/hooks/useUserAvatar.ts +++ b/site/lib/hooks/useUserAvatar.ts @@ -17,7 +17,7 @@ export const useUserAvatar = (name = 'userAvatar') => { localStorage.setItem(name, value) setUserAvatar(value) } - }, []) + }, [name, setUserAvatar, userAvatar]) return { userAvatar, diff --git a/site/lib/search.tsx b/site/lib/search.tsx index eaeaf66fc..98ec2d06c 100644 --- a/site/lib/search.tsx +++ b/site/lib/search.tsx @@ -44,9 +44,7 @@ export const getCategoryPath = (path: string, brand?: string) => { } export const getDesignerPath = (path: string, category?: string) => { - const designer = getSlug(path).replace(/^brands/, 'designers') - - return `/search${designer ? `/${designer}` : ''}${ + return `/search${path ? `/designers${path}` : ''}${ category ? `/${category}` : '' }` } diff --git a/site/next.config.js b/site/next.config.js index 22ecc1e17..0b21164a3 100644 --- a/site/next.config.js +++ b/site/next.config.js @@ -18,7 +18,7 @@ module.exports = withCommerceConfig({ return [ (isBC || isShopify || isSwell || isVendure || isSaleor) && { source: '/checkout', - destination: '/api/checkout', + destination: '/api/commerce/checkout', }, // The logout is also an action so this route is not required, but it's also another way // you can allow a logout! @@ -35,6 +35,11 @@ module.exports = withCommerceConfig({ }, ].filter(Boolean) }, + + // Avoid Module not found: ESM packages (supports-color) need to be imported. Use 'import' to reference the package instead. https://nextjs.org/docs/messages/import-esm-externals + experimental: { + esmExternals: 'loose', + }, }) // Don't delete this console log, useful to see the commerce config in Vercel deployments diff --git a/site/package.json b/site/package.json index 3287b51f6..fad38b5b0 100644 --- a/site/package.json +++ b/site/package.json @@ -13,36 +13,37 @@ }, "sideEffects": false, "dependencies": { - "@radix-ui/react-dropdown-menu": "^0.1.6", + "@radix-ui/react-dropdown-menu": "^1.0.0", "@react-spring/web": "^9.4.1", - "@vercel/commerce": "^0.0.1", - "@vercel/commerce-bigcommerce": "^0.0.1", - "@vercel/commerce-commercejs": "^0.0.1", - "@vercel/commerce-kibocommerce": "^0.0.1", - "@vercel/commerce-local": "^0.0.1", - "@vercel/commerce-ordercloud": "^0.0.1", - "@vercel/commerce-saleor": "^0.0.1", - "@vercel/commerce-shopify": "^0.0.1", - "@vercel/commerce-spree": "^0.0.1", - "@vercel/commerce-swell": "^0.0.1", - "@vercel/commerce-vendure": "^0.0.1", - "@vercel/commerce-opencommerce": "^0.0.1", + "@vercel/commerce": "workspace:*", + "@vercel/commerce-bigcommerce": "workspace:*", + "@vercel/commerce-commercejs": "workspace:*", + "@vercel/commerce-kibocommerce": "workspace:*", + "@vercel/commerce-local": "workspace:*", + "@vercel/commerce-ordercloud": "workspace:*", + "@vercel/commerce-saleor": "workspace:*", + "@vercel/commerce-sfcc": "workspace:*", + "@vercel/commerce-shopify": "workspace:*", + "@vercel/commerce-spree": "workspace:*", + "@vercel/commerce-swell": "workspace:*", + "@vercel/commerce-vendure": "workspace:*", + "@vercel/commerce-opencommerce": "workspace:*", "autoprefixer": "^10.4.2", "body-scroll-lock": "^4.0.0-beta.0", "clsx": "^1.1.1", "email-validator": "^2.0.4", "js-cookie": "^3.0.1", - "keen-slider": "^6.6.3", + "keen-slider": "^6.7.0", "lodash.random": "^3.2.0", "lodash.throttle": "^4.1.1", - "next": "^12.0.8", - "next-themes": "^0.0.15", + "next": "^13.0.4", + "next-themes": "^0.2.0", "postcss": "^8.3.5", - "postcss-nesting": "^8.0.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "postcss-nesting": "^10.1.10", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-fast-marquee": "^1.3.1", - "react-merge-refs": "^1.1.0", + "react-merge-refs": "^2.0.1", "react-use-measure": "^2.1.1", "tabbable": "^5.2.1", "tailwindcss": "^3.0.13" @@ -53,16 +54,17 @@ "@types/js-cookie": "^3.0.1", "@types/lodash.random": "^3.2.6", "@types/lodash.throttle": "^4.1.6", - "@types/node": "^17.0.8", - "@types/react": "^17.0.38", + "@types/node": "^18.0.3", + "@types/react": "^18.0.20", + "@types/react-dom": "^18.0.6", "eslint": "^8.6.0", "eslint-config-next": "^12.0.8", "eslint-config-prettier": "^8.3.0", - "lint-staged": "^12.1.7", + "lint-staged": "^13.0.3", "postcss-flexbugs-fixes": "^5.0.2", "postcss-preset-env": "^7.2.3", "prettier": "^2.5.1", - "typescript": "4.3.4" + "typescript": "4.7.4" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ diff --git a/site/pages/_app.tsx b/site/pages/_app.tsx index dae0311b4..26e1484fa 100644 --- a/site/pages/_app.tsx +++ b/site/pages/_app.tsx @@ -2,12 +2,12 @@ import '@assets/main.css' import '@assets/chrome-bug.css' import 'keen-slider/keen-slider.min.css' -import { FC, useEffect } from 'react' +import { FC, ReactNode, useEffect } from 'react' import type { AppProps } from 'next/app' import { Head } from '@components/common' import { ManagedUIContext } from '@components/ui/context' -const Noop: FC = ({ children }) => <>{children} +const Noop: FC<{ children?: ReactNode }> = ({ children }) => <>{children} export default function MyApp({ Component, pageProps }: AppProps) { const Layout = (Component as any).Layout || Noop diff --git a/site/pages/api/cart.ts b/site/pages/api/cart.ts deleted file mode 100644 index 642891107..000000000 --- a/site/pages/api/cart.ts +++ /dev/null @@ -1,4 +0,0 @@ -import cartApi from '@framework/api/endpoints/cart' -import commerce from '@lib/api/commerce' - -export default cartApi(commerce) diff --git a/site/pages/api/catalog/products.ts b/site/pages/api/catalog/products.ts deleted file mode 100644 index 631bfd516..000000000 --- a/site/pages/api/catalog/products.ts +++ /dev/null @@ -1,4 +0,0 @@ -import productsApi from '@framework/api/endpoints/catalog/products' -import commerce from '@lib/api/commerce' - -export default productsApi(commerce) diff --git a/site/pages/api/checkout.ts b/site/pages/api/checkout.ts deleted file mode 100644 index 7bf0fd9aa..000000000 --- a/site/pages/api/checkout.ts +++ /dev/null @@ -1,4 +0,0 @@ -import checkoutApi from '@framework/api/endpoints/checkout' -import commerce from '@lib/api/commerce' - -export default checkoutApi(commerce) diff --git a/site/pages/api/commerce/[[...commerce]].ts b/site/pages/api/commerce/[[...commerce]].ts new file mode 100644 index 000000000..956555630 --- /dev/null +++ b/site/pages/api/commerce/[[...commerce]].ts @@ -0,0 +1,8 @@ +import commerce from '@lib/api/commerce' +import endpoints from '@framework/api/endpoints' + +// export const config = { +// runtime: 'experimental-edge', +// } + +export default endpoints(commerce) diff --git a/site/pages/api/customer/address.ts b/site/pages/api/customer/address.ts deleted file mode 100644 index 5815ea462..000000000 --- a/site/pages/api/customer/address.ts +++ /dev/null @@ -1,4 +0,0 @@ -import customerAddressApi from '@framework/api/endpoints/customer/address' -import commerce from '@lib/api/commerce' - -export default customerAddressApi(commerce) diff --git a/site/pages/api/customer/card.ts b/site/pages/api/customer/card.ts deleted file mode 100644 index 6f88b8c74..000000000 --- a/site/pages/api/customer/card.ts +++ /dev/null @@ -1,4 +0,0 @@ -import customerCardApi from '@framework/api/endpoints/customer/card' -import commerce from '@lib/api/commerce' - -export default customerCardApi(commerce) diff --git a/site/pages/api/customer/index.ts b/site/pages/api/customer/index.ts deleted file mode 100644 index 0c86e76e5..000000000 --- a/site/pages/api/customer/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import customerApi from '@framework/api/endpoints/customer' -import commerce from '@lib/api/commerce' - -export default customerApi(commerce) diff --git a/site/pages/api/login.ts b/site/pages/api/login.ts deleted file mode 100644 index 9d0b6ae57..000000000 --- a/site/pages/api/login.ts +++ /dev/null @@ -1,4 +0,0 @@ -import loginApi from '@framework/api/endpoints/login' -import commerce from '@lib/api/commerce' - -export default loginApi(commerce) diff --git a/site/pages/api/logout.ts b/site/pages/api/logout.ts deleted file mode 100644 index 0cf0fc4d2..000000000 --- a/site/pages/api/logout.ts +++ /dev/null @@ -1,4 +0,0 @@ -import logoutApi from '@framework/api/endpoints/logout' -import commerce from '@lib/api/commerce' - -export default logoutApi(commerce) diff --git a/site/pages/api/signup.ts b/site/pages/api/signup.ts deleted file mode 100644 index e19d67ee8..000000000 --- a/site/pages/api/signup.ts +++ /dev/null @@ -1,4 +0,0 @@ -import singupApi from '@framework/api/endpoints/signup' -import commerce from '@lib/api/commerce' - -export default singupApi(commerce) diff --git a/site/pages/api/wishlist.ts b/site/pages/api/wishlist.ts deleted file mode 100644 index 3b9681209..000000000 --- a/site/pages/api/wishlist.ts +++ /dev/null @@ -1,4 +0,0 @@ -import wishlistApi from '@framework/api/endpoints/wishlist' -import commerce from '@lib/api/commerce' - -export default wishlistApi(commerce) diff --git a/site/pages/index.tsx b/site/pages/index.tsx index 6b3eca4dc..1c7ba6a78 100644 --- a/site/pages/index.tsx +++ b/site/pages/index.tsx @@ -47,6 +47,7 @@ export default function Home({ key={product.id} product={product} imgProps={{ + alt: product.name, width: i === 0 ? 1080 : 540, height: i === 0 ? 1080 : 540, priority: true, @@ -69,8 +70,9 @@ export default function Home({ key={product.id} product={product} imgProps={{ - width: i === 0 ? 1080 : 540, - height: i === 0 ? 1080 : 540, + alt: product.name, + width: i === 1 ? 1080 : 540, + height: i === 1 ? 1080 : 540, }} /> ))} diff --git a/site/pages/product/[slug].tsx b/site/pages/product/[slug].tsx index eb705cdf2..b8df91538 100644 --- a/site/pages/product/[slug].tsx +++ b/site/pages/product/[slug].tsx @@ -22,19 +22,21 @@ export async function getStaticProps({ config, preview, }) - const allProductsPromise = commerce.getAllProducts({ variables: { first: 4 }, config, preview, }) + const { pages } = await pagesPromise const { categories, navigation } = await siteInfoPromise const { product } = await productPromise const { products: relatedProducts } = await allProductsPromise if (!product) { - throw new Error(`Product with slug '${params!.slug}' not found`) + return { + notFound: true, + } } return { diff --git a/site/pages/wishlist.tsx b/site/pages/wishlist.tsx index 1b8edb31f..c8e2ec5f5 100644 --- a/site/pages/wishlist.tsx +++ b/site/pages/wishlist.tsx @@ -35,9 +35,10 @@ export async function getStaticProps({ } export default function Wishlist() { - const { data: customer } = useCustomer() // @ts-ignore Shopify - Fix this types - const { data, isLoading, isEmpty } = useWishlist({ includeProducts: true }) + const { data, isLoading, isEmpty } = useWishlist({ + includeProducts: true, + }) return ( @@ -45,10 +46,10 @@ export default function Wishlist() { My Wishlist
      {isLoading ? ( -
      - {rangeMap(12, (i) => ( +
      + {rangeMap(4, (i) => ( -
      +
      ))}
      @@ -69,7 +70,7 @@ export default function Wishlist() { {data && // @ts-ignore - Wishlist Item Type data.items?.map((item) => ( - + ))}
      )} diff --git a/turbo.json b/turbo.json index 8e38ccddc..f9bca04d3 100644 --- a/turbo.json +++ b/turbo.json @@ -1,4 +1,5 @@ { + "$schema": "https://turborepo.org/schema.json", "baseBranch": "origin/main", "pipeline": { "build": { @@ -7,11 +8,13 @@ }, "next-commerce#build": { "dependsOn": [ - "^build", - "$COMMERCE_PROVIDER", - "$BIGCOMMERCE_STOREFRONT_API_URL", - "$NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN", - "$NEXT_PUBLIC_SWELL_STORE_ID" + "^build" + ], + "env": [ + "COMMERCE_PROVIDER", + "BIGCOMMERCE_STOREFRONT_API_URL", + "NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN", + "NEXT_PUBLIC_SWELL_STORE_ID" ], "outputs": [".next/**"] }, diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 332864849..000000000 --- a/yarn.lock +++ /dev/null @@ -1,7923 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/core@^7.14.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.12.tgz#b4eb2d7ebc3449b062381644c93050db545b70ee" - integrity sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.12" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-module-transforms" "^7.17.12" - "@babel/helpers" "^7.17.9" - "@babel/parser" "^7.17.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.12" - "@babel/types" "^7.17.12" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@^7.14.0", "@babel/generator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.12.tgz#5970e6160e9be0428e02f4aba62d8551ec366cc8" - integrity sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw== - dependencies: - "@babel/types" "^7.17.12" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe" - integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz#d4f8393fc4838cbff6b7c199af5229aee16d07cf" - integrity sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz#bec00139520cb3feb078ef7a4578562480efb77e" - integrity sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.12" - "@babel/types" "^7.17.12" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.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-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" - integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.9" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.14.0", "@babel/parser@^7.16.7", "@babel/parser@^7.16.8", "@babel/parser@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.12.tgz#36c2ed06944e3691ba82735fc4cf62d12d491a23" - integrity sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA== - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" - integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz#f94a91715a7f2f8cfb3c06af820c776440bc0148" - integrity sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.17.12" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz#23d852902acd19f42923fca9d0f196984d124e73" - integrity sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" - integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz#68fc3c4b3bb7dfd809d97b7ed19a584052a2725c" - integrity sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-classes@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz#da889e89a4d38375eeb24985218edeab93af4f29" - integrity sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-destructuring@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz#0861d61e75e2401aca30f2570d46dfc85caacf35" - integrity sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz#5e070f99a4152194bd9275de140e83a92966cab3" - integrity sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-flow" "^7.17.12" - -"@babel/plugin-transform-for-of@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz#5397c22554ec737a27918e7e7e0e7b679b05f5ec" - integrity sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-function-name@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-member-expression-literals@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz#37691c7404320d007288edd5a2d8600bcef61c34" - integrity sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA== - dependencies: - "@babel/helper-module-transforms" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.17.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-object-super@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" - integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-property-literals@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" - integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/types" "^7.17.12" - -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" - integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz#4aec0a18f39dd86c442e1d077746df003e362c6e" - integrity sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/runtime-corejs3@^7.10.2": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055" - integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw== - dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" - -"@babel/runtime@7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" - integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.12", "@babel/traverse@^7.17.9": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.12.tgz#011874d2abbca0ccf1adbe38f6f7a4ff1747599c" - integrity sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.12" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.12" - "@babel/types" "^7.17.12" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.12.tgz#1210690a516489c0200f355d87619157fbbd69a0" - integrity sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@chec/commerce.js@^2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@chec/commerce.js/-/commerce.js-2.8.0.tgz#c213cfcc2bc366fe66b77ea561dfa4b3aa7abc8c" - integrity sha512-OPBphT/hU33iDp52zzYOqz/oSXLhEuhGVUg2UNvYtmBW4eCNmtsM0dqW0+wu+6K0d6fZojurCBdVQMKb2R7l3g== - dependencies: - "@babel/runtime" "^7.7.4" - axios "^0.21.1" - -"@commerce-apps/core@^1.5.5": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@commerce-apps/core/-/core-1.6.0.tgz#f9c1db5b9d7d0a2c038abfad2c343c2d5308f9a2" - integrity sha512-UpzdT6Tyu6k4a/qGBTYhL8u/M2DbfSuyEdD5PeOCUMJZ8KC/9fu7HyvyM/Tnlini9R9we4YboVcpS5egmpSaWg== - dependencies: - "@keyv/redis" "^2.2.2" - dotenv "^8.6.0" - fetch-to-curl "^0.5.2" - ioredis "^4.28.3" - jsonwebtoken "^8.5.1" - keyv "^4.0.5" - lodash "^4.17.21" - loglevel "^1.8.0" - make-fetch-happen "^8.0.14" - minipass-fetch "^1.4.1" - qs "^6.10.3" - quick-lru "^5.1.1" - retry "^0.13.1" - ssri "^8.0.1" - tslib "^1.14.1" - -"@csstools/postcss-color-function@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz#229966327747f58fbe586de35daa139db3ce1e5d" - integrity sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-font-format-keywords@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz#7e7df948a83a0dfb7eb150a96e2390ac642356a1" - integrity sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-hwb-function@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz#5224db711ed09a965f85c80c18144ac1c2702fce" - integrity sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-ic-unit@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz#f484db59fc94f35a21b6d680d23b0ec69b286b7f" - integrity sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.4.tgz#6e8b49b96a7d3346d5316bd773dcff9c983b4183" - integrity sha512-T2Tmr5RIxkCEXxHwMVyValqwv3h5FTJPpmU8Mq/HDV+TY6C9srVaNMiMG/sp0QaxUnVQQrnXsuLU+1g2zrLDcQ== - dependencies: - "@csstools/selector-specificity" "^1.0.0" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-normalize-display-values@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz#ce698f688c28517447aedf15a9037987e3d2dc97" - integrity sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz#e9a269487a292e0930760948e923e1d46b638ee6" - integrity sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" - integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-stepped-value-functions@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz#f8ffc05e163ba7bcbefc5fdcaf264ce9fd408c16" - integrity sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-unset-value@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz#2cc020785db5ec82cc9444afe4cdae2a65445f89" - integrity sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg== - -"@csstools/selector-specificity@1.0.0", "@csstools/selector-specificity@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-1.0.0.tgz#91c560df2ed8d9700e4c7ed4ac21a3a322c9d975" - integrity sha512-RkYG5KiGNX0fJ5YoI0f4Wfq2Yo74D25Hru4fxTOioYdQvHBxcrrtTTyT5Ozzh2ejcNrhFy7IEts2WyEY7yi5yw== - -"@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" - integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA== - dependencies: - lodash.get "^4" - make-error "^1" - ts-node "^9" - tslib "^2" - -"@eslint/eslintrc@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.3.tgz#fcaa2bcef39e13d6e9e7f6271f4cc7cae1174886" - integrity sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.9.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@gar/promisify@^1.0.1": - 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== - -"@graphql-codegen/cli@2.6.2", "@graphql-codegen/cli@^2.3.1": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-2.6.2.tgz#a9aa4656141ee0998cae8c7ad7d0bf9ca8e0c9ae" - integrity sha512-UO75msoVgvLEvfjCezM09cQQqp32+mR8Ma1ACsBpr7nroFvHbgcu2ulx1cMovg4sxDBCsvd9Eq/xOOMpARUxtw== - dependencies: - "@graphql-codegen/core" "2.5.1" - "@graphql-codegen/plugin-helpers" "^2.4.1" - "@graphql-tools/apollo-engine-loader" "^7.0.5" - "@graphql-tools/code-file-loader" "^7.0.6" - "@graphql-tools/git-loader" "^7.0.5" - "@graphql-tools/github-loader" "^7.0.5" - "@graphql-tools/graphql-file-loader" "^7.0.5" - "@graphql-tools/json-file-loader" "^7.1.2" - "@graphql-tools/load" "^7.3.0" - "@graphql-tools/prisma-loader" "^7.0.6" - "@graphql-tools/url-loader" "^7.0.11" - "@graphql-tools/utils" "^8.1.1" - ansi-escapes "^4.3.1" - chalk "^4.1.0" - change-case-all "1.0.14" - chokidar "^3.5.2" - common-tags "^1.8.0" - cosmiconfig "^7.0.0" - debounce "^1.2.0" - dependency-graph "^0.11.0" - detect-indent "^6.0.0" - glob "^7.1.6" - globby "^11.0.4" - graphql-config "^4.1.0" - inquirer "^8.0.0" - is-glob "^4.0.1" - json-to-pretty-yaml "^1.2.2" - latest-version "5.1.0" - listr "^0.14.3" - listr-update-renderer "^0.5.0" - log-symbols "^4.0.0" - minimatch "^4.0.0" - mkdirp "^1.0.4" - string-env-interpolation "^1.0.1" - ts-log "^2.2.3" - tslib "~2.3.0" - valid-url "^1.0.9" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^17.0.0" - -"@graphql-codegen/core@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-2.5.1.tgz#e3d50d3449b8c58b74ea08e97faf656a1b7fc8a1" - integrity sha512-alctBVl2hMnBXDLwkgmnFPrZVIiBDsWJSmxJcM4GKg1PB23+xuov35GE47YAyAhQItE1B1fbYnbb1PtGiDZ4LA== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.1" - "@graphql-tools/schema" "^8.1.2" - "@graphql-tools/utils" "^8.1.1" - tslib "~2.3.0" - -"@graphql-codegen/plugin-helpers@^2.3.2", "@graphql-codegen/plugin-helpers@^2.4.0", "@graphql-codegen/plugin-helpers@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.4.2.tgz#e4f6b74dddcf8a9974fef5ce48562ae0980f9fed" - integrity sha512-LJNvwAPv/sKtI3RnRDm+nPD+JeOfOuSOS4FFIpQCMUCyMnFcchV/CPTTv7tT12fLUpEg6XjuFfDBvOwndti30Q== - dependencies: - "@graphql-tools/utils" "^8.5.2" - change-case-all "1.0.14" - common-tags "1.8.2" - import-from "4.0.0" - lodash "~4.17.0" - tslib "~2.3.0" - -"@graphql-codegen/schema-ast@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-2.4.1.tgz#ad742b53e32f7a2fbff8ea8a91ba7e617e6ef236" - integrity sha512-bIWlKk/ShoVJfghA4Rt1OWnd34/dQmZM/vAe6fu6QKyOh44aAdqPtYQ2dbTyFXoknmu504etKJGEDllYNUJRfg== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.3.2" - "@graphql-tools/utils" "^8.1.1" - tslib "~2.3.0" - -"@graphql-codegen/typescript-operations@2.3.5": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-2.3.5.tgz#1e77b96da0949f9e0ecd6054eb28b582936e35e8" - integrity sha512-GCZQW+O+cIF62ioPkQMoSJGzjJhtr7ttZGJOAoN/Q/oolG8ph9jNFePKO67tSQ/POAs5HLqfat4kAlCK8OPV3Q== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/typescript" "^2.4.8" - "@graphql-codegen/visitor-plugin-common" "2.7.4" - auto-bind "~4.0.0" - tslib "~2.3.0" - -"@graphql-codegen/typescript-operations@^2.2.2": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-2.4.0.tgz#07f371bcda31ecb8edc4c742442014b21c11d53b" - integrity sha512-vJ15FLyWchuO2Xkp6uz7jJOdChiay7P9KJKFDILx/JTwjinU1fFa7iOvyeTvslqiUPxgsXthR5izdY+E5IyLkQ== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/typescript" "^2.4.11" - "@graphql-codegen/visitor-plugin-common" "2.8.0" - auto-bind "~4.0.0" - tslib "~2.4.0" - -"@graphql-codegen/typescript@2.4.8": - version "2.4.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-2.4.8.tgz#e8110baba9713cde72d57a5c95aa27400363ed9a" - integrity sha512-tVsHIkuyenBany7c5IMU1yi4S1er2hgyXJGNY7PcyhpJMx0eChmbqz1VTiZxDEwi8mDBS2mn3TaSJMh6xuJM5g== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/schema-ast" "^2.4.1" - "@graphql-codegen/visitor-plugin-common" "2.7.4" - auto-bind "~4.0.0" - tslib "~2.3.0" - -"@graphql-codegen/typescript@^2.4.11", "@graphql-codegen/typescript@^2.4.2", "@graphql-codegen/typescript@^2.4.8": - version "2.4.11" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-2.4.11.tgz#b9d8bddaeb79ff4a85e1d0f9c774afba7423177c" - integrity sha512-K3oDLPJRH9Wgpg9TOvb7L+xrJZ8HxkIzV2umqGn54c+8DQjvnRFBIYRO0THgUBMnEauE2sEy6RZkGHGfgQUruA== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/schema-ast" "^2.4.1" - "@graphql-codegen/visitor-plugin-common" "2.8.0" - auto-bind "~4.0.0" - tslib "~2.4.0" - -"@graphql-codegen/visitor-plugin-common@2.7.4": - version "2.7.4" - resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.7.4.tgz#fbc8aec9df0035b8f29fa64a6356cbb02062da5d" - integrity sha512-aaDoEudDD+B7DK/UwDSL2Fzej75N9hNJ3N8FQuTIeDyw6FNGWUxmkjVBLQGlzfnYfK8IYkdfYkrPn3Skq0pVxA== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-tools/optimize" "^1.0.1" - "@graphql-tools/relay-operation-optimizer" "^6.3.7" - "@graphql-tools/utils" "^8.3.0" - auto-bind "~4.0.0" - change-case-all "1.0.14" - dependency-graph "^0.11.0" - graphql-tag "^2.11.0" - parse-filepath "^1.0.2" - tslib "~2.3.0" - -"@graphql-codegen/visitor-plugin-common@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.8.0.tgz#f1de3bd5ee123e6f72c06423912a3a83a6044938" - integrity sha512-29MOaxBog7qaEhmeCzJn2mONSbcA+slCTzHN4nJ3aZl4KrC9V32rXlQpG5x0qHbFQ1LaG1f5gPO83xbiAeMBIw== - dependencies: - "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-tools/optimize" "^1.0.1" - "@graphql-tools/relay-operation-optimizer" "^6.3.7" - "@graphql-tools/utils" "^8.3.0" - auto-bind "~4.0.0" - change-case-all "1.0.14" - dependency-graph "^0.11.0" - graphql-tag "^2.11.0" - parse-filepath "^1.0.2" - tslib "~2.4.0" - -"@graphql-tools/apollo-engine-loader@^7.0.5": - version "7.2.16" - resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.2.16.tgz#bf130e0a7910cd43200871b2376fe0d952713809" - integrity sha512-e21qGgkyhogdQREB6wOLvxUlGYpcxrEQm6u6OyVaGjZUJvLo8wFT2eIwgMCY/m1woWx2OdfdBq6/1TTScJhfcA== - dependencies: - "@graphql-tools/utils" "8.6.10" - cross-undici-fetch "^0.4.0" - sync-fetch "0.3.1" - tslib "~2.4.0" - -"@graphql-tools/batch-execute@8.4.7": - version "8.4.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.4.7.tgz#199d0ec7fbe6539056fdfd28e015c612926a7932" - integrity sha512-+ZXikTo8kJ1hJAQrT94sUrwmdL8EcvoDz4HULbb4B8hIFw0PPBaGkEaN8u5ylsCLOEoWIQNe1SwHx9yDhlvnJg== - dependencies: - "@graphql-tools/utils" "8.6.10" - dataloader "2.1.0" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/code-file-loader@^7.0.6": - version "7.2.15" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.2.15.tgz#2307741bec6987c88a1a53695cb17dc59c8ba7a0" - integrity sha512-tqViC0MEXadcGofqDU4mL7eA/+TyM4iCP+XRkL/mdAMYWp1JdzMYUJcCH47ZK1+EvNctYx8sJOpSGlvLR4ZFFg== - dependencies: - "@graphql-tools/graphql-tag-pluck" "7.2.7" - "@graphql-tools/utils" "8.6.10" - globby "^11.0.3" - tslib "~2.4.0" - unixify "^1.0.0" - -"@graphql-tools/delegate@8.7.8": - version "8.7.8" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.7.8.tgz#c7e94d66825286615f738367665aa3036d79eff0" - integrity sha512-QRpk0B0VD+23mC3ePBLM542TvCXbQhdr0V/AmcnpxQLsV27/NA6fDxxN/zjjjs15M5v9/M2DaBT4rwY9NMMlQA== - dependencies: - "@graphql-tools/batch-execute" "8.4.7" - "@graphql-tools/schema" "8.3.11" - "@graphql-tools/utils" "8.6.10" - dataloader "2.1.0" - graphql-executor "0.0.23" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/git-loader@^7.0.5": - version "7.1.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.1.14.tgz#f8dfb8a5cade31ddbd625571e9db6ebe9155474c" - integrity sha512-i1uZ1zxbzrEK+h7wttGpJbGiw80EVop/lNwHtdEOdQd4kp/DKqAJaJJjjvUwi5IBWwtp/BM2ujBAwe1+3R2MSA== - dependencies: - "@graphql-tools/graphql-tag-pluck" "7.2.7" - "@graphql-tools/utils" "8.6.10" - is-glob "4.0.3" - micromatch "^4.0.4" - tslib "~2.4.0" - unixify "^1.0.0" - -"@graphql-tools/github-loader@^7.0.5": - version "7.2.20" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-7.2.20.tgz#bbf923264f5983888f425265305fe3929e79fe63" - integrity sha512-Ua2eJ61+NHSOYemoAkWY1kFv83J+BkEONz3cqcrhCa7wWMW4OUUzzvw1g+A2fuMLk7R6ATgKADjDPTMyfRYnyQ== - dependencies: - "@graphql-tools/graphql-tag-pluck" "7.2.7" - "@graphql-tools/utils" "8.6.10" - cross-undici-fetch "^0.4.0" - sync-fetch "0.3.1" - tslib "~2.4.0" - -"@graphql-tools/graphql-file-loader@^7.0.5", "@graphql-tools/graphql-file-loader@^7.3.7": - version "7.3.12" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.3.12.tgz#1d0ef43bd2066d517788fa36668e2486c47724c2" - integrity sha512-V1K+g0QBflBnN58pU6jo7qrmXfIJjSgmIGo4zYxbMwfvcYCQcTmfYnKWUkvZmBj0cXIAGfhqSOQZsxZW9rgXIA== - dependencies: - "@graphql-tools/import" "6.6.14" - "@graphql-tools/utils" "8.6.10" - globby "^11.0.3" - tslib "~2.4.0" - unixify "^1.0.0" - -"@graphql-tools/graphql-tag-pluck@7.2.7": - version "7.2.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.2.7.tgz#c137a3460898c7f82fcab20b958010637009a9b1" - integrity sha512-leh6rVHNoGXjmbOtTaKNXQtFw4Gu7PokTlEOweNKYMssbH6L1zrKA0G4cE55s60JBo9SF4hjg8X7Gkech5t+mQ== - dependencies: - "@babel/parser" "^7.16.8" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - "@graphql-tools/utils" "8.6.10" - tslib "~2.4.0" - -"@graphql-tools/import@6.6.14": - version "6.6.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.6.14.tgz#d5bcbc23abc1563346081155afec003f4eb8e47b" - integrity sha512-XN6swtMdUxd9czmdNIK6yJ0w5t4FOUWSoSkYP0+to8j44r8zdM3nsAppoA0OLmsUY+JnTBgkW3jGlOFvqC3HWg== - dependencies: - "@graphql-tools/utils" "8.6.10" - resolve-from "5.0.0" - tslib "~2.4.0" - -"@graphql-tools/json-file-loader@^7.1.2", "@graphql-tools/json-file-loader@^7.3.7": - version "7.3.12" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.3.12.tgz#e841e2539d5eeea0b0847fd002a3584c791e9d06" - integrity sha512-gmH6XFN7Alt/hGXeez6Jlp0/lHuY9O1rLVKq5w5FqslkQvWYg2dqzhn2U9jRqD42NbEmSQ5Sjhfkdmc4VT6OfA== - dependencies: - "@graphql-tools/utils" "8.6.10" - globby "^11.0.3" - tslib "~2.4.0" - unixify "^1.0.0" - -"@graphql-tools/load@^7.3.0", "@graphql-tools/load@^7.5.5": - version "7.5.11" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.5.11.tgz#0309054298b912321d6822e3f73c5f7ba0c84ea4" - integrity sha512-a8sD3iHfxcbIwP0nSxF+DUAVg+/MuLNOizVJHcZGGS8AdDoezUsnWRkNDT6FlVqRoxHNbkpq8+6B55JKtqHSxg== - dependencies: - "@graphql-tools/schema" "8.3.11" - "@graphql-tools/utils" "8.6.10" - p-limit "3.1.0" - tslib "~2.4.0" - -"@graphql-tools/merge@8.2.11", "@graphql-tools/merge@^8.2.6": - version "8.2.11" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.2.11.tgz#0cdc6c9feb32e3392bf0c633881a78ccc1d24368" - integrity sha512-fsjJVdsk9GV1jj1Ed2AKLlHYlsf0ZadTK8X5KxFRE1ZSnKqh56BLVX93JrtOIAnsiHkwOK2TC43HGhApF1swpQ== - dependencies: - "@graphql-tools/utils" "8.6.10" - tslib "~2.4.0" - -"@graphql-tools/optimize@^1.0.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-1.2.0.tgz#292d0a269f95d04bc6d822c034569bb7e591fb26" - integrity sha512-l0PTqgHeorQdeOizUor6RB49eOAng9+abSxiC5/aHRo6hMmXVaqv5eqndlmxCpx9BkgNb3URQbK+ZZHVktkP/g== - dependencies: - tslib "~2.3.0" - -"@graphql-tools/prisma-loader@^7.0.6": - version "7.1.20" - resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-7.1.20.tgz#a64ac87a2511bbbd4fca163378c75ad8544cabd1" - integrity sha512-of7yQ/GDSqca54YjUC6FZlvmN3fXHT3VrpIbK0P0F9N2Z/cDK0E7OEF+YKS7jk8gUsFgM1+sfbFk5B11CTWP1Q== - dependencies: - "@graphql-tools/url-loader" "7.9.21" - "@graphql-tools/utils" "8.6.10" - "@types/js-yaml" "^4.0.0" - "@types/json-stable-stringify" "^1.0.32" - "@types/jsonwebtoken" "^8.5.0" - chalk "^4.1.0" - debug "^4.3.1" - dotenv "^16.0.0" - graphql-request "^4.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - isomorphic-fetch "^3.0.0" - js-yaml "^4.0.0" - json-stable-stringify "^1.0.1" - jsonwebtoken "^8.5.1" - lodash "^4.17.20" - replaceall "^0.1.6" - scuid "^1.1.0" - tslib "~2.4.0" - yaml-ast-parser "^0.0.43" - -"@graphql-tools/relay-operation-optimizer@^6.3.7": - version "6.4.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.4.10.tgz#30bafaf6f35708784dceace430c793181efcef8e" - integrity sha512-a5wDdXP7MmwZDy9R8+RZ0ajJBWX1Lk9sIG6uSIo5G/LnGpXncgBhKpJf5r6rOf0zsFLWnAkYm/dCDMpFaGE/Yw== - dependencies: - "@graphql-tools/utils" "8.6.10" - relay-compiler "12.0.0" - tslib "~2.4.0" - -"@graphql-tools/schema@8.3.11", "@graphql-tools/schema@^8.1.2": - version "8.3.11" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.3.11.tgz#c0606b301852820a46042ebb888fd09cc402518a" - integrity sha512-esMEnbyXbp8B5VEI4o395+x0G7Qmz3JSX5onFBF8HeLYcqWJasY5vBuWkO18VxrZpEnvnryodP6Y00bVag9O3Q== - dependencies: - "@graphql-tools/merge" "8.2.11" - "@graphql-tools/utils" "8.6.10" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/url-loader@7.9.21", "@graphql-tools/url-loader@^7.0.11", "@graphql-tools/url-loader@^7.9.7": - version "7.9.21" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.9.21.tgz#4ceeca79ac71ac0ed2358360ef6f94594033ed52" - integrity sha512-OPE08LVvKmeGyauWWksRYTBtQ1lB0kHUv2hofb0lOlD4TKURg53TwFopncof+1IT+1hTl3sLsERn7S5M1Z5PhQ== - dependencies: - "@graphql-tools/delegate" "8.7.8" - "@graphql-tools/utils" "8.6.10" - "@graphql-tools/wrap" "8.4.17" - "@n1ru4l/graphql-live-query" "^0.9.0" - "@types/ws" "^8.0.0" - cross-undici-fetch "^0.4.0" - dset "^3.1.0" - extract-files "^11.0.0" - graphql-ws "^5.4.1" - isomorphic-ws "^4.0.1" - meros "^1.1.4" - sync-fetch "^0.3.1" - tslib "^2.3.0" - value-or-promise "^1.0.11" - ws "^8.3.0" - -"@graphql-tools/utils@8.6.10", "@graphql-tools/utils@^8.1.1", "@graphql-tools/utils@^8.3.0", "@graphql-tools/utils@^8.5.2", "@graphql-tools/utils@^8.6.5": - version "8.6.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.6.10.tgz#38e42a97a74ffcf5a21e816401e2ca1647194f6a" - integrity sha512-bJH9qwuyM3BP0PTU6/lvBDkk6jdEIOn+dbyk4pHMVNnvbJ1gZQwo62To8SHxxaUTus8OMhhVPSh9ApWXREURcg== - dependencies: - tslib "~2.4.0" - -"@graphql-tools/wrap@8.4.17": - version "8.4.17" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-8.4.17.tgz#7c8906a0a7d463aeff8d3c01e94095e93af42ee4" - integrity sha512-oXTNXuUsty2smv3wm9M0W3Pon+fofy9ItIgGT3xfHnJITCNC2GC1s29lhcr0pIZL4Tjp7oTlqMx+sPjLHETSzw== - dependencies: - "@graphql-tools/delegate" "8.7.8" - "@graphql-tools/schema" "8.3.11" - "@graphql-tools/utils" "8.6.10" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@iarna/toml@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - -"@ioredis/commands@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.1.1.tgz#2ba4299ea624a6bfac15b35f6df90b0015691ec3" - integrity sha512-fsR4P/ROllzf/7lXYyElUJCheWdTJVJvOTps8v9IWKFATxR61ANOlnoPqhH099xYLrJGpc2ZQ28B3rMeUt5VQg== - -"@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": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@keyv/redis@^2.2.2": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@keyv/redis/-/redis-2.3.5.tgz#8ff4fecf9b5520cac2a346e6216db59474df3385" - integrity sha512-dO9sn1HEPVkh1b7Cn/jcLyi7sDFKmnGQIaXw4wTIhJzkwcev24CffvEU26B+KRUNBu/2PgNVNRfFmEpy1smb4w== - dependencies: - ioredis "^5.0.4" - -"@n1ru4l/graphql-live-query@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@n1ru4l/graphql-live-query/-/graphql-live-query-0.9.0.tgz#defaebdd31f625bee49e6745934f36312532b2bc" - integrity sha512-BTpWy1e+FxN82RnLz4x1+JcEewVdfmUhV1C6/XYD5AjS7PQp9QFF7K8bCD6gzPTr2l+prvqOyVueQhFJxB1vfg== - -"@next/bundle-analyzer@^12.0.8": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.1.6.tgz#5f4efcdb8c91d70c8be6013b0aacdb4d89ba1312" - integrity sha512-WLydwytAeHoC/neXsiIgK+a6Me12PuSpwopnsZgX5JFNwXQ9MlwPeMGS3aTZkYsv8QmSm0Ns9Yh9FkgLKYaUuQ== - dependencies: - webpack-bundle-analyzer "4.3.0" - -"@next/env@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08" - integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA== - -"@next/eslint-plugin-next@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz#dde3f98831f15923b25244588d924c716956292e" - integrity sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw== - dependencies: - glob "7.1.7" - -"@next/swc-android-arm-eabi@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9" - integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ== - -"@next/swc-android-arm64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456" - integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew== - -"@next/swc-darwin-arm64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119" - integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw== - -"@next/swc-darwin-x64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec" - integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg== - -"@next/swc-linux-arm-gnueabihf@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f" - integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw== - -"@next/swc-linux-arm64-gnu@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae" - integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ== - -"@next/swc-linux-arm64-musl@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671" - integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ== - -"@next/swc-linux-x64-gnu@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08" - integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ== - -"@next/swc-linux-x64-musl@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea" - integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag== - -"@next/swc-win32-arm64-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02" - integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g== - -"@next/swc-win32-ia32-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9" - integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA== - -"@next/swc-win32-x64-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e" - integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^1.0.0": - 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/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@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== - -"@radix-ui/popper@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/popper/-/popper-0.1.0.tgz#c387a38f31b7799e1ea0d2bb1ca0c91c2931b063" - integrity sha512-uzYeElL3w7SeNMuQpXiFlBhTT+JyaNMCwDfjKkrzugEcYrf5n52PHqncNdQPUtR42hJh8V9FsqyEDbDxkeNjJQ== - dependencies: - "@babel/runtime" "^7.13.10" - csstype "^3.0.4" - -"@radix-ui/primitive@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-0.1.0.tgz#6206b97d379994f0d1929809db035733b337e543" - integrity sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-arrow@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-0.1.4.tgz#a871448a418cd3507d83840fdd47558cb961672b" - integrity sha512-BB6XzAb7Ml7+wwpFdYVtZpK1BlMgqyafSQNGzhIpSZ4uXvXOHPlR5GP8M449JkeQzgQjv9Mp1AsJxFC0KuOtuA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "0.1.4" - -"@radix-ui/react-collection@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-0.1.4.tgz#734061ffd5bb93e88889d49b87391a73a63824c9" - integrity sha512-3muGI15IdgaDFjOcO7xX8a35HQRBRF6LH9pS6UCeZeRmbslkVeHyJRQr2rzICBUoX7zgIA0kXyMDbpQnJGyJTA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-context" "0.1.1" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-slot" "0.1.2" - -"@radix-ui/react-compose-refs@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz#cff6e780a0f73778b976acff2c2a5b6551caab95" - integrity sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-context@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-0.1.1.tgz#06996829ea124d9a1bc1dbe3e51f33588fab0875" - integrity sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-dismissable-layer@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-0.1.5.tgz#9379032351e79028d472733a5cc8ba4a0ea43314" - integrity sha512-J+fYWijkX4M4QKwf9dtu1oC0U6e6CEl8WhBp3Ad23yz2Hia0XCo6Pk/mp5CAFy4QBtQedTSkhW05AdtSOEoajQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "0.1.0" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-body-pointer-events" "0.1.1" - "@radix-ui/react-use-callback-ref" "0.1.0" - "@radix-ui/react-use-escape-keydown" "0.1.0" - -"@radix-ui/react-dropdown-menu@^0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-0.1.6.tgz#3203229788cd57e552c9f19dcc7008e2b545919c" - integrity sha512-RZhtzjWwJ4ZBN7D8ek4Zn+ilHzYuYta9yIxFnbC0pfqMnSi67IQNONo1tuuNqtFh9SRHacPKc65zo+kBBlxtdg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "0.1.0" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-context" "0.1.1" - "@radix-ui/react-id" "0.1.5" - "@radix-ui/react-menu" "0.1.6" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-controllable-state" "0.1.0" - -"@radix-ui/react-focus-guards@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-0.1.0.tgz#ba3b6f902cba7826569f8edc21ff8223dece7def" - integrity sha512-kRx/swAjEfBpQ3ns7J3H4uxpXuWCqN7MpALiSDOXiyo2vkWv0L9sxvbpZeTulINuE3CGMzicVMuNc/VWXjFKOg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-focus-scope@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-0.1.4.tgz#c830724e212d42ffaaa81aee49533213d09b47df" - integrity sha512-fbA4ES3H4Wkxp+OeLhvN6SwL7mXNn/aBtUf7DRYxY9+Akrf7dRxl2ck4lgcpPsSg3zSDsEwLcY+h5cmj5yvlug== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-callback-ref" "0.1.0" - -"@radix-ui/react-id@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-0.1.5.tgz#010d311bedd5a2884c1e9bb6aaaa4e6cc1d1d3b8" - integrity sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "0.1.0" - -"@radix-ui/react-menu@0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-0.1.6.tgz#7f9521a10f6a9cd819b33b33d5ed9538d79b2e75" - integrity sha512-ho3+bhpr3oAFkOBJ8VkUb1BcGoiZBB3OmcWPqa6i5RTUKrzNX/d6rauochu2xDlWjiRtpVuiAcsTVOeIC4FbYQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "0.1.0" - "@radix-ui/react-collection" "0.1.4" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-context" "0.1.1" - "@radix-ui/react-dismissable-layer" "0.1.5" - "@radix-ui/react-focus-guards" "0.1.0" - "@radix-ui/react-focus-scope" "0.1.4" - "@radix-ui/react-id" "0.1.5" - "@radix-ui/react-popper" "0.1.4" - "@radix-ui/react-portal" "0.1.4" - "@radix-ui/react-presence" "0.1.2" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-roving-focus" "0.1.5" - "@radix-ui/react-use-callback-ref" "0.1.0" - "@radix-ui/react-use-direction" "0.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "^2.4.0" - -"@radix-ui/react-popper@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-0.1.4.tgz#dfc055dcd7dfae6a2eff7a70d333141d15a5d029" - integrity sha512-18gDYof97t8UQa7zwklG1Dr8jIdj3u+rVOQLzPi9f5i1YQak/pVGkaqw8aY+iDUknKKuZniTk/7jbAJUYlKyOw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/popper" "0.1.0" - "@radix-ui/react-arrow" "0.1.4" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-context" "0.1.1" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-rect" "0.1.1" - "@radix-ui/react-use-size" "0.1.1" - "@radix-ui/rect" "0.1.1" - -"@radix-ui/react-portal@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-0.1.4.tgz#17bdce3d7f1a9a0b35cb5e935ab8bc562441a7d2" - integrity sha512-MO0wRy2eYRTZ/CyOri9NANCAtAtq89DEtg90gicaTlkCfdqCLEBsLb+/q66BZQTr3xX/Vq01nnVfc/TkCqoqvw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-layout-effect" "0.1.0" - -"@radix-ui/react-presence@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-0.1.2.tgz#9f11cce3df73cf65bc348e8b76d891f0d54c1fe3" - integrity sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-use-layout-effect" "0.1.0" - -"@radix-ui/react-primitive@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz#6c233cf08b0cb87fecd107e9efecb3f21861edc1" - integrity sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "0.1.2" - -"@radix-ui/react-roving-focus@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-0.1.5.tgz#cc48d17a36b56f253d54905b0fd60ee134cb97ee" - integrity sha512-ClwKPS5JZE+PaHCoW7eu1onvE61pDv4kO8W4t5Ra3qMFQiTJLZMdpBQUhksN//DaVygoLirz4Samdr5Y1x1FSA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "0.1.0" - "@radix-ui/react-collection" "0.1.4" - "@radix-ui/react-compose-refs" "0.1.0" - "@radix-ui/react-context" "0.1.1" - "@radix-ui/react-id" "0.1.5" - "@radix-ui/react-primitive" "0.1.4" - "@radix-ui/react-use-callback-ref" "0.1.0" - "@radix-ui/react-use-controllable-state" "0.1.0" - -"@radix-ui/react-slot@0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-0.1.2.tgz#e6f7ad9caa8ce81cc8d532c854c56f9b8b6307c8" - integrity sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "0.1.0" - -"@radix-ui/react-use-body-pointer-events@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-body-pointer-events/-/react-use-body-pointer-events-0.1.1.tgz#63e7fd81ca7ffd30841deb584cd2b7f460df2597" - integrity sha512-R8leV2AWmJokTmERM8cMXFHWSiv/fzOLhG/JLmRBhLTAzOj37EQizssq4oW0Z29VcZy2tODMi9Pk/htxwb+xpA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "0.1.0" - -"@radix-ui/react-use-callback-ref@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz#934b6e123330f5b3a6b116460e6662cbc663493f" - integrity sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-controllable-state@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz#4fced164acfc69a4e34fb9d193afdab973a55de1" - integrity sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "0.1.0" - -"@radix-ui/react-use-direction@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-direction/-/react-use-direction-0.1.0.tgz#97ac1d52e497c974389e7988f809238ed72e7df7" - integrity sha512-NajpY/An9TCPSfOVkgWIdXJV+VuWl67PxB6kOKYmtNAFHvObzIoh8o0n9sAuwSAyFCZVq211FEf9gvVDRhOyiA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-escape-keydown@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-0.1.0.tgz#dc80cb3753e9d1bd992adbad9a149fb6ea941874" - integrity sha512-tDLZbTGFmvXaazUXXv8kYbiCcbAE8yKgng9s95d8fCO+Eundv0Jngbn/hKPhDDs4jj9ChwRX5cDDnlaN+ugYYQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "0.1.0" - -"@radix-ui/react-use-layout-effect@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz#ebf71bd6d2825de8f1fbb984abf2293823f0f223" - integrity sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-rect@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz#6c15384beee59c086e75b89a7e66f3d2e583a856" - integrity sha512-kHNNXAsP3/PeszEmM/nxBBS9Jbo93sO+xuMTcRfwzXsmxT5gDXQzAiKbZQ0EecCPtJIzqvr7dlaQi/aP1PKYqQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "0.1.1" - -"@radix-ui/react-use-size@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz#f6b75272a5d41c3089ca78c8a2e48e5f204ef90f" - integrity sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/rect@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-0.1.1.tgz#95b5ba51f469bea6b1b841e2d427e17e37d38419" - integrity sha512-g3hnE/UcOg7REdewduRPAK88EPuLZtaq7sA9ouu8S+YEtnyFRI16jgv6GZYe3VMoQLL1T171ebmEPtDjyxWLzw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@react-spring/animated@~9.4.5": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.5.tgz#dd9921c716a4f4a3ed29491e0c0c9f8ca0eb1a54" - integrity sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA== - dependencies: - "@react-spring/shared" "~9.4.5" - "@react-spring/types" "~9.4.5" - -"@react-spring/core@~9.4.5": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.4.5.tgz#4616e1adc18dd10f5731f100ebdbe9518b89ba3c" - integrity sha512-83u3FzfQmGMJFwZLAJSwF24/ZJctwUkWtyPD7KYtNagrFeQKUH1I05ZuhmCmqW+2w1KDW1SFWQ43RawqfXKiiQ== - dependencies: - "@react-spring/animated" "~9.4.5" - "@react-spring/rafz" "~9.4.5" - "@react-spring/shared" "~9.4.5" - "@react-spring/types" "~9.4.5" - -"@react-spring/rafz@~9.4.5": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.4.5.tgz#84f809f287f2a66bbfbc66195db340482f886bd7" - integrity sha512-swGsutMwvnoyTRxvqhfJBtGM8Ipx6ks0RkIpNX9F/U7XmyPvBMGd3GgX/mqxZUpdlsuI1zr/jiYw+GXZxAlLcQ== - -"@react-spring/shared@~9.4.5": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.4.5.tgz#4c3ad817bca547984fb1539204d752a412a6d829" - integrity sha512-JhMh3nFKsqyag0KM5IIM8BQANGscTdd0mMv3BXsUiMZrcjQTskyfnv5qxEeGWbJGGar52qr5kHuBHtCjQOzniA== - dependencies: - "@react-spring/rafz" "~9.4.5" - "@react-spring/types" "~9.4.5" - -"@react-spring/types@~9.4.5": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.5.tgz#9c71e5ff866b5484a7ef3db822bf6c10e77bdd8c" - integrity sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg== - -"@react-spring/web@^9.4.1": - version "9.4.5" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.4.5.tgz#b92f05b87cdc0963a59ee149e677dcaff09f680e" - integrity sha512-NGAkOtKmOzDEctL7MzRlQGv24sRce++0xAY7KlcxmeVkR7LRSGkoXHaIfm9ObzxPMcPHQYQhf3+X9jepIFNHQA== - dependencies: - "@react-spring/animated" "~9.4.5" - "@react-spring/core" "~9.4.5" - "@react-spring/shared" "~9.4.5" - "@react-spring/types" "~9.4.5" - -"@rushstack/eslint-patch@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0" - integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw== - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - -"@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== - -"@spree/storefront-api-v2-sdk@^5.1.1": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@spree/storefront-api-v2-sdk/-/storefront-api-v2-sdk-5.1.4.tgz#d073d2bda98b9dd2e72daf527593c4874e504150" - integrity sha512-KvAVQ9wDAy+2EajiEGoFmw3iZRi9xERR/wKS2z+h2BaQsHMEJhe/xh06lFecEu9RKH4/k3m2dqrijyNzWLJ+Gw== - -"@swc/core-android-arm-eabi@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.186.tgz#542941efac1a481c3794a19014574c5c376ab0a7" - integrity sha512-y+xiLOlkksP69mCQTbSJi/TvELJ+VAVCS/A8xBynnbZXyst4byaEDz0b6PpSTeFU0QufyygzlIARBBxi48RAQg== - -"@swc/core-android-arm64@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.186.tgz#0b4cf17ea869126bfbf0a75dd1b0486bbedfb8a7" - integrity sha512-W7FZDXfs2b8UIsdBlyRbG8Me2L5k77nitd38LmPFzj9G67DQWhVyoCoHMx38kbsRE82GVO2LmZ28Ehrl7TQw5w== - -"@swc/core-darwin-arm64@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.186.tgz#5958e85b156cea9b384cc3b9191ccf9e2aaf5e1b" - integrity sha512-v0aKuzZEV8zqyxrFohVzKjbbOWllgUd0Mgs8Fbft/K7Brp4QzBXvSjhOwsnNE4AlwzRLdINQfQz/RO6Ygp9H4Q== - -"@swc/core-darwin-x64@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.186.tgz#384af1740d262f8eeaf51bb2f4014d32867da071" - integrity sha512-qhwFRvjFxkgiPqpg8ifo9bN6ONlPdn0xWPnkph2rpJhByMkNW2LEIApEPgS0ePhI9gq4Wksp5oxCviH1v36gQA== - -"@swc/core-freebsd-x64@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.186.tgz#438b3067b0357903875bce5b0ab16e7277d4ab8f" - integrity sha512-HhL4HqqShE3lCB7NWXRVjjiEN4t05usHrCBtHEADsZDAGglJRMjT9ZLGLVxGOxEziWCIR+kOV2jcMv0Bf4Bbaw== - -"@swc/core-linux-arm-gnueabihf@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.186.tgz#df2e4f0ff8f98ae3fa364a0c7c84988e3b5296fc" - integrity sha512-ouAREnVdbUnZA0y4wYdAZZKIvqJ1uer9hOCbafgGyrmR9i8Lhswz2fPUGOUc+rxjqsP1z7uN5CpMcAH4KvyNUQ== - -"@swc/core-linux-arm64-gnu@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.186.tgz#884b2d781f224744cf7c40cfa70d029f92016f37" - integrity sha512-b8GbZ2FVlQrDWyqC/KW9zScAvvUx6StLDvGAPWxD2GvFHjE0iPnvLHGvuVuhje0pFFqSwZnQ5/KZ6VyrKowPJw== - -"@swc/core-linux-arm64-musl@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.186.tgz#b76d88778bbe4f5fb72155ef5bb506417d8a7216" - integrity sha512-vWvfQiC7K2oMxuKbAWTgVVoTs7SpHb8GyecAzQbQWNIyOycLMihCXhgj99cz0GaSeEs/0SEd+FSoU+uldUysjA== - -"@swc/core-linux-x64-gnu@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.186.tgz#38362067f1242ec46aff72386c07c9341b11bc27" - integrity sha512-lGBOQd9GZsk6JQd1teZPIirir4vpcGPFlEKaoWMHTVgb4wyU0I6sW2edoHMWu+mUugs12/JpHWh7sw+ubgZzHA== - -"@swc/core-linux-x64-musl@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.186.tgz#5b21b8bb3d795b70d0f7959524152600db6d2c49" - integrity sha512-H6pFxBpg3R+g0DDXzs39c9A7+O/ai1Zwliwo7jwOfLu4ef/cq2xrKa0AJ22lawtU9A+4gwRCX78phf2ezjC2jw== - -"@swc/core-win32-arm64-msvc@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.186.tgz#4892a9660a0b0c467a07192d188a0ef1d86f0a44" - integrity sha512-B178S3J5L9Z21IBVMNCarvM6kQrxHQVtT8V7vhUgldPJ5Nc2ty7ELYvrSdtiARqKP5PacKMur+nb8XIyhoJfIw== - -"@swc/core-win32-ia32-msvc@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.186.tgz#802800e2a76fcbe4671eb8542e06e00c8ae2f3b6" - integrity sha512-0VqhXRn+MVth9hdwRR/X0unT9hdUOa5Y8FRUgMm3ft/72bFSAz3E8UNYMWMtVbjuViNYJgAOPML+VE9UqN80JQ== - -"@swc/core-win32-x64-msvc@1.2.186": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.186.tgz#80a44caaab3d0c88ff5453a8c6543caad75e67ee" - integrity sha512-T+sNpLbtg5Q1zrDIOwzRDVCKQHb4eQx8MlIk9tF74amlBLt1GKBdgRn17YAA6GrNHRw7QHaDIeCEdc5OuUztvg== - -"@swc/core@^1.2.138": - version "1.2.186" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.186.tgz#4d096f9065e5dd87bb418cece3370ce7f1b5edfa" - integrity sha512-n+I0z+gIsk+rkO2/UYGLcnyI2bq0YcHFtnMynRtZ8v541luGszFLBrayd3ljnmt4mFzSPY+2gTSQgK5HNuYk5g== - optionalDependencies: - "@swc/core-android-arm-eabi" "1.2.186" - "@swc/core-android-arm64" "1.2.186" - "@swc/core-darwin-arm64" "1.2.186" - "@swc/core-darwin-x64" "1.2.186" - "@swc/core-freebsd-x64" "1.2.186" - "@swc/core-linux-arm-gnueabihf" "1.2.186" - "@swc/core-linux-arm64-gnu" "1.2.186" - "@swc/core-linux-arm64-musl" "1.2.186" - "@swc/core-linux-x64-gnu" "1.2.186" - "@swc/core-linux-x64-musl" "1.2.186" - "@swc/core-win32-arm64-msvc" "1.2.186" - "@swc/core-win32-ia32-msvc" "1.2.186" - "@swc/core-win32-x64-msvc" "1.2.186" - -"@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== - dependencies: - defer-to-connect "^1.0.1" - -"@taskr/clear@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@taskr/clear/-/clear-1.1.0.tgz#0a88d180bed2f91f310136375a72c00b50834fd1" - integrity sha512-QC/zyNneQ5N2kyL4ZmiaMqXxXW7VqwqJssbbdezUs0113Y711I44tXQGKWJnxPVFOe3oGrFGNnkRESPKWq8AYw== - dependencies: - bluebird "^3.5.0" - rimraf "^2.5.4" - -"@taskr/esnext@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@taskr/esnext/-/esnext-1.1.0.tgz#e8ca509f45fc57a4e2152945c27500c531cf87dd" - integrity sha512-lO9JrkSt2uR/jMZHxHyEZC+K/TvusALewWbgNN3aQaVmPEOevYGNaBlmX7kK2XDNgpL1cWlC1NSVS7PHqMu8Ng== - dependencies: - require-like "^0.1.2" - rewrite-imports "^1.0.0" - -"@taskr/watch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@taskr/watch/-/watch-1.1.0.tgz#bf447178cfac71fc99b250ff46c40ad3f96173d6" - integrity sha512-CIgNdU4eEPOXn2LeW3voYsHA3vskbqPhYfNWTMvNIUVx4ZJtClQcfEME+MeBzW1xEnGUGMgHTL5jf1V2LmPt3A== - dependencies: - chokidar "^1.7.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== - -"@types/async-retry@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/async-retry/-/async-retry-1.2.1.tgz#fa9ac165907a8ee78f4924f4e393b656c65b5bb4" - integrity sha512-yMQ6CVgICWtyFNBqJT3zqOc+TnqqEPLo4nKJNPFwcialiylil38Ie6q1ENeFTjvaLOkVim9K5LisHgAKJWidGQ== - -"@types/async-retry@^1.4.3": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@types/async-retry/-/async-retry-1.4.4.tgz#3304ce1e64f8757723f166518fc4c4b68df4fe66" - integrity sha512-IGT+yESLPYje0MV8MfOpT5V5oH9lAKLwlosQRyq75tYJmntkkWcfEThHLxsgYjGmYXJEY7ZZkYPb4xuW+NA6GA== - dependencies: - "@types/retry" "*" - -"@types/body-scroll-lock@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/body-scroll-lock/-/body-scroll-lock-3.1.0.tgz#435f6abf682bf58640e1c2ee5978320b891970e7" - integrity sha512-3owAC4iJub5WPqRhxd8INarF2bWeQq1yQHBgYhN0XLBJMpd5ED10RrJ3aKiAwlTyL5wK7RkBD4SZUQz2AAAMdA== - -"@types/chec__commerce.js@*", "@types/chec__commerce.js@^2.8.4": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@types/chec__commerce.js/-/chec__commerce.js-2.8.5.tgz#1f0e1c4d6f6406db74f675d6596fd40a90a189af" - integrity sha512-SkQXxm7R/OBiqHEPV33xdqTFdCw5u2H39qZ2YQGSsuDkAyaUpALnaUlrZ06T8UMHSwHrQTXCrDnG8GgzbKwIXg== - dependencies: - "@types/chec__commerce.js" "*" - -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/js-cookie@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.2.tgz#451eaeece64c6bdac8b2dde0caab23b085899e0d" - integrity sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA== - -"@types/js-yaml@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" - integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== - -"@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-stable-stringify@^1.0.32": - version "1.0.34" - resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz#c0fb25e4d957e0ee2e497c1f553d7f8bb668fd75" - integrity sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonwebtoken@^8.5.0", "@types/jsonwebtoken@^8.5.7": - version "8.5.8" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" - integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== - dependencies: - "@types/node" "*" - -"@types/lodash.debounce@^4.0.6": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz#0285879defb7cdb156ae633cecd62d5680eded9f" - integrity sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.random@^3.2.6": - version "3.2.7" - resolved "https://registry.yarnpkg.com/@types/lodash.random/-/lodash.random-3.2.7.tgz#3100a1b7956ce86ab5adcce2e7b305412b98e3bf" - integrity sha512-gFKkVgWYi1q7RFJ+QNTzaRprdhVIZLpZd6C3MTNehKcujMn9SyFUqf2fTBOmvIYXqNk0RpwfbdOwHf0GnEQB0g== - dependencies: - "@types/lodash" "*" - -"@types/lodash.throttle@^4.1.6": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/lodash.throttle/-/lodash.throttle-4.1.7.tgz#4ef379eb4f778068022310ef166625f420b6ba58" - integrity sha512-znwGDpjCHQ4FpLLx19w4OXDqq8+OvREa05H89obtSyXyOFKL3dDjCslsmfBz0T2FU8dmf5Wx1QvogbINiGIu9g== - 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/lru-cache@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-4.1.1.tgz#b2d87a5e3df8d4b18ca426c5105cd701c2306d40" - integrity sha512-8mNEUG6diOrI6pMqOHrHPDBB1JsrpedeMK9AWGzVCQ7StRRribiT9BRvUmF8aUws9iBbVlgVekOT5Sgzc1MTKw== - -"@types/node-fetch@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" - integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*", "@types/node@>=8.1.0", "@types/node@^17.0.8": - version "17.0.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.34.tgz#3b0b6a50ff797280b8d000c6281d229f9c538cef" - integrity sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA== - -"@types/node@10.12.18": - version "10.12.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react@^17.0.38": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.45.tgz#9b3d5b661fd26365fefef0e766a1c6c30ccf7b3f" - integrity sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/retry@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" - integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/uuid@8.3.4": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - -"@types/ws@^8.0.0": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@typescript-eslint/parser@^5.21.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.25.0.tgz#fb533487147b4b9efd999a4d2da0b6c263b64f7f" - integrity sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA== - dependencies: - "@typescript-eslint/scope-manager" "5.25.0" - "@typescript-eslint/types" "5.25.0" - "@typescript-eslint/typescript-estree" "5.25.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.25.0.tgz#e78f1484bca7e484c48782075219c82c6b77a09f" - integrity sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww== - dependencies: - "@typescript-eslint/types" "5.25.0" - "@typescript-eslint/visitor-keys" "5.25.0" - -"@typescript-eslint/types@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.25.0.tgz#dee51b1855788b24a2eceeae54e4adb89b088dd8" - integrity sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA== - -"@typescript-eslint/typescript-estree@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.25.0.tgz#a7ab40d32eb944e3fb5b4e3646e81b1bcdd63e00" - integrity sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw== - dependencies: - "@typescript-eslint/types" "5.25.0" - "@typescript-eslint/visitor-keys" "5.25.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.25.0.tgz#33aa5fdcc5cedb9f4c8828c6a019d58548d4474b" - integrity sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA== - dependencies: - "@typescript-eslint/types" "5.25.0" - eslint-visitor-keys "^3.3.0" - -"@vercel/fetch-cached-dns@^2.0.2": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@vercel/fetch-cached-dns/-/fetch-cached-dns-2.1.0.tgz#15332b49cbeeb476eecbed0d3660e76808b3365a" - integrity sha512-dIQWF+bG2EOYeCCCeT3E77qZZa7VgW2quEKw4k8/keeoD8lRMjiNi//Ww7LJ8wXecfv7XXtprwN5uLLLGo/ktg== - dependencies: - "@types/node-fetch" "^2.6.1" - "@zeit/dns-cached-resolve" "^2.1.2" - -"@vercel/fetch-retry@^5.0.3": - version "5.1.3" - resolved "https://registry.yarnpkg.com/@vercel/fetch-retry/-/fetch-retry-5.1.3.tgz#1bca6531d4a006e3961469472d726a70edc459f2" - integrity sha512-UIbFc4VsEZHOr6dWuE+kxY4NxnOLXFMCWm0fSKRRHUEtrIzaJLzHpWk2QskCXTSzFgFvhkLAvSrBK2XZg7NSzg== - dependencies: - async-retry "^1.3.3" - debug "^4.3.3" - -"@vercel/fetch@^6.1.1": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@vercel/fetch/-/fetch-6.2.0.tgz#149b97dddeb2c98a23439665f42baa66d5aa3903" - integrity sha512-MU+Mzh06NIAXxwdnyHmBFg+/lTKBbzDkCSNhAwWTFJ4rHuBc4pHc8E6XP+qnwqaWugjOBQgFfQCGDLnV820c9A== - dependencies: - "@types/async-retry" "^1.4.3" - "@vercel/fetch-cached-dns" "^2.0.2" - "@vercel/fetch-retry" "^5.0.3" - agentkeepalive "^4.2.1" - debug "^4.3.3" - -"@zeit/dns-cached-resolve@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.2.tgz#2c2e33d682d67f94341c9a06ac0e2a8f14ff035f" - integrity sha512-A/5gbBskKPETTBqHwvlaW1Ri2orO62yqoFoXdxna1SQ7A/lXjpWgpJ1wdY3IQEcz5LydpS4sJ8SzI2gFyyLEhg== - dependencies: - "@types/async-retry" "1.2.1" - "@types/lru-cache" "4.1.1" - "@types/node" "10.12.18" - async-retry "1.2.3" - lru-cache "5.1.1" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-node@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0: - version "7.2.0" - 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: - 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== - -acorn@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.4, acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3, 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" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -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" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -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== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -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== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -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.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" - integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-hidden@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.1.3.tgz#bb48de18dc84787a3c6eee113709c473c64ec254" - integrity sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA== - dependencies: - tslib "^1.0.0" - -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" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA== - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-includes-with-glob@^3.0.6: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-includes-with-glob/-/array-includes-with-glob-3.1.0.tgz#f04e8172f231ab8261e52bfe9756b65c08b87ab9" - integrity sha512-/PZEKASyXWmUTkNhuxnmqybv1CmIdY5rp3axLy3Dv6SYfaBb+EgS7Nl991mquHT1N2u0YAnE3IOafVNRM6Y9dw== - dependencies: - "@babel/runtime" "^7.14.0" - matcher "^4.0.0" - -array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-each@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-retry@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" - integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== - dependencies: - retry "0.12.0" - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -auto-bind@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" - integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== - -autoprefixer@^10.4.2, autoprefixer@^10.4.6: - version "10.4.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf" - integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== - dependencies: - browserslist "^4.20.3" - caniuse-lite "^1.0.30001335" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axe-core@^4.3.5: - version "4.4.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c" - integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - -babel-preset-fbjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" - integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.1.0: - 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" - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-scroll-lock@^4.0.0-beta.0: - version "4.0.0-beta.0" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e" - integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw== - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -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== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.20.2, browserslist@^4.20.3: - version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0, buffer@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.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== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-request@^6.0.0: - 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" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001335: - version "1.0.30001341" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz#59590c8ffa8b5939cf4161f00827b8873ad72498" - integrity sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA== - -capital-case@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" - integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case-all@1.0.14: - version "1.0.14" - resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.14.tgz#bac04da08ad143278d0ac3dda7eccd39280bfba1" - integrity sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA== - dependencies: - change-case "^4.1.2" - is-lower-case "^2.0.2" - is-upper-case "^2.0.2" - lower-case "^2.0.2" - lower-case-first "^2.0.2" - sponge-case "^1.0.1" - swap-case "^2.0.2" - title-case "^3.0.3" - upper-case "^2.0.2" - upper-case-first "^2.0.2" - -change-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" - integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== - dependencies: - camel-case "^4.1.2" - capital-case "^1.0.4" - constant-case "^3.0.4" - dot-case "^3.0.4" - header-case "^2.0.4" - no-case "^3.0.4" - param-case "^3.0.4" - pascal-case "^3.1.2" - path-case "^3.0.4" - sentence-case "^3.0.4" - snake-case "^3.0.4" - tslib "^2.0.3" - -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== - -chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg== - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^3.5.2, chokidar@^3.5.3: - 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" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg== - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -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== - dependencies: - 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@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.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= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clor@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/clor/-/clor-5.2.0.tgz#9ddc74e7e86728cfcd05a80546ba58d317b81035" - integrity sha512-Z+jjxoF4lNUJQtsdz7d9HLz7yP49hnt4CH76AB7DLusHws14gOlVMl/ShtkMPfoFculqejaiQW5EG2Gt5/cCdg== - -clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== - -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== - -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= - -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= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -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= - -color-name@^1.1.4, 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== - -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== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commerce-sdk@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/commerce-sdk/-/commerce-sdk-2.7.1.tgz#86799c1e81b81e712350053f0289d99d2e7d797f" - integrity sha512-eE4QYdC4nu90pmrVIc1xKTHlOBSrbudibO65192esSP3Xsin7Lyut9TfC2hIUSPWYHnY63UOdJ5Ew/W77YmGtA== - dependencies: - "@commerce-apps/core" "^1.5.5" - lodash "^4.17.21" - retry "^0.12.0" - tslib "^2.3.1" - -common-tags@1.8.2, common-tags@^1.8.0: - 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== - -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" - -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= - -constant-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" - integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case "^2.0.2" - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -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= - -core-js-pure@^3.20.2: - version "3.22.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.5.tgz#bdee0ed2f9b78f2862cda4338a07b13a49b6c9a9" - integrity sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig-toml-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-toml-loader/-/cosmiconfig-toml-loader-1.0.0.tgz#0681383651cceff918177debe9084c0d3769509b" - integrity sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA== - dependencies: - "@iarna/toml" "^2.2.5" - -cosmiconfig@7.0.1, cosmiconfig@^7.0.0: - 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" - -create-require@^1.1.0: - 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== - -cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-undici-fetch@^0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/cross-undici-fetch/-/cross-undici-fetch-0.4.3.tgz#465d13d4d7d7a1dae75f8ad85aa0ecfa2752e99f" - integrity sha512-mv1jusEQsFnBHEBkpFaYROKAzAWyuW8ZyN48NcyqkjLGRrscMKuFRmUigUrkE/pdprQZjNTQQ/aWJKe6F4tzTA== - dependencies: - abort-controller "^3.0.0" - busboy "^1.6.0" - form-data-encoder "^1.7.1" - formdata-node "^4.3.1" - node-fetch "^2.6.7" - undici "^5.1.0" - web-streams-polyfill "^3.2.0" - -css-blank-pseudo@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" - integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== - dependencies: - postcss-selector-parser "^6.0.9" - -css-has-pseudo@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" - integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== - dependencies: - postcss-selector-parser "^6.0.9" - -css-prefers-color-scheme@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" - integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== - -cssdb@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.6.1.tgz#2637fdc57eab452849488de7e8d961ec06f2fe8f" - integrity sha512-0/nZEYfp8SFEzJkMud8NxZJsGfD7RHDJti6GRBLZptIwAzco6RTx1KgwFl4mGWsYS0ZNbCrsY9QryhQ4ldF3Mg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2, csstype@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== - -damerau-levenshtein@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -dataloader@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" - integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -debounce@^1.2.0, debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -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: - 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@^2.2.0, debug@^2.3.3, debug@^2.6.9: - 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@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -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" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@4.2.2, deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -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== - -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: - 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= - 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= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -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= - -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== - -denque@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" - integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -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== - dependencies: - acorn-node "^1.6.1" - defined "^1.0.0" - minimist "^1.1.1" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -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== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-12.0.4.tgz#87e302cfddeef475fcaf9a617f7b44f80ac555bc" - integrity sha512-oWdqbSywffzH1l4WXKPHWA0TWYpqp7IyLfqjipT4upoIFS0HPMqtNotykQpD4iIg0BqtNmdgPCh2WMvMt7yTiw== - -dotenv@^16.0.0: - version "16.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" - integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== - -dotenv@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -dset@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" - integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== - -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" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -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== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -electron-to-chromium@^1.4.118: - version "1.4.137" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz#186180a45617283f1c012284458510cd99d6787f" - integrity sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -email-validator@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed" - integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ== - -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== - -encoding@^0.1.12: - 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.1.0: - 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== - dependencies: - once "^1.4.0" - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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= - -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== - -eslint-config-next@^12.0.8: - version "12.1.6" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.6.tgz#55097028982dce49159d8753000be3916ac55254" - integrity sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA== - dependencies: - "@next/eslint-plugin-next" "12.1.6" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.21.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^2.7.1" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.29.4" - eslint-plugin-react-hooks "^4.5.0" - -eslint-config-prettier@^8.3.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-import-resolver-typescript@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" - integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== - dependencies: - debug "^4.3.4" - glob "^7.2.0" - is-glob "^4.0.3" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" - integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== - dependencies: - "@babel/runtime" "^7.16.3" - aria-query "^4.2.2" - array-includes "^3.1.4" - ast-types-flow "^0.0.7" - axe-core "^4.3.5" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.7" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.2.1" - language-tags "^1.0.5" - minimatch "^3.0.4" - -eslint-plugin-react-hooks@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== - -eslint-plugin-react@^7.29.4: - version "7.29.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" - integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== - dependencies: - array-includes "^3.1.4" - array.prototype.flatmap "^1.2.5" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.0" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.6" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.6.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.15.0.tgz#fea1d55a7062da48d82600d2e0974c55612a11e9" - integrity sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA== - dependencies: - "@eslint/eslintrc" "^1.2.3" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -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= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -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= - 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= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-files@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" - integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== - -extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - 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.2.11, 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" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -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= - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== - dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - -fetch-to-curl@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fetch-to-curl/-/fetch-to-curl-0.5.2.tgz#9f007ecb3547edeffee49394ff076727dc56d603" - integrity sha512-ygmvsJlU+V4GE91lflkRNAJ956xm5MFl6QukIyxkd6yojTxr6gjp4BsYh7hYXlwVw+ffnMlAIXOTWsWJdk017Q== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -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= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.14.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" - integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== - -for-in@^1.0.1, 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= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -form-data-encoder@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" - integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-node@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.3.2.tgz#0262e94931e36db7239c2b08bdb6aaf18ec47d21" - integrity sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg== - dependencies: - node-domexception "1.0.0" - web-streams-polyfill "4.0.0-beta.1" - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -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= - dependencies: - map-cache "^0.2.2" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -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= - -fsevents@^1.0.0: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - 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== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - -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.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -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= - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: - 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.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.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: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graphql-config@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.3.0.tgz#b9bb7bf9c892a90e66ea937e8d7ed170eb1fd5e2" - integrity sha512-Uiu3X7+s5c056WyrvdZVz2vG1fhAipMlYmtiCU/4Z2mX79OXDr1SqIon2MprC/pExIWJfAQZCcjYDY76fPBUQg== - dependencies: - "@endemolshinegroup/cosmiconfig-typescript-loader" "3.0.2" - "@graphql-tools/graphql-file-loader" "^7.3.7" - "@graphql-tools/json-file-loader" "^7.3.7" - "@graphql-tools/load" "^7.5.5" - "@graphql-tools/merge" "^8.2.6" - "@graphql-tools/url-loader" "^7.9.7" - "@graphql-tools/utils" "^8.6.5" - cosmiconfig "7.0.1" - cosmiconfig-toml-loader "1.0.0" - minimatch "4.2.1" - string-env-interpolation "1.0.1" - -graphql-executor@0.0.23: - version "0.0.23" - resolved "https://registry.yarnpkg.com/graphql-executor/-/graphql-executor-0.0.23.tgz#205c1764b39ee0fcf611553865770f37b45851a2" - integrity sha512-3Ivlyfjaw3BWmGtUSnMpP/a4dcXCp0mJtj0PiPG14OKUizaMKlSEX+LX2Qed0LrxwniIwvU6B4w/koVjEPyWJg== - -graphql-request@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-4.2.0.tgz#063377bc2dd29cc46aed3fddcc65fe97b805ba81" - integrity sha512-uFeMyhhl8ss4LFgjlfPeAn2pqYw+CJto+cjj71uaBYIMMK2jPIqgHm5KEFxUk0YDD41A8Bq31a2b4G2WJBlp2Q== - dependencies: - cross-fetch "^3.1.5" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql-tag@^2.11.0: - 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-ws@^5.4.1: - version "5.8.2" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.8.2.tgz#800184b1addb20b3010dc06cb70877703a5fff20" - integrity sha512-hYo8kTGzxePFJtMGC7Y4cbypwifMphIJJ7n4TDcVUAfviRwQBnmZAbfZlC+XFwWDUaR7raEDQPxWctpccmE0JQ== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -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= - dependencies: - ansi-regex "^2.0.0" - -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= - -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-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" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -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= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -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= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.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= - -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= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -header-case@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" - integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== - dependencies: - capital-case "^1.0.4" - tslib "^2.0.3" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "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-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -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" - -https-proxy-agent@^5.0.0: - 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" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -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= - dependencies: - ms "^2.0.0" - -husky@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 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== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -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== - -immutability-helper@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7" - integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ== - -immutable@~3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" - integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= - -import-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^8.0.0: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invariant@^2.2.4: - 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.28.3: - 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" - -ioredis@^5.0.4: - version "5.0.5" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.0.5.tgz#94e51284631b30e15b359cd17de59c48945230fb" - integrity sha512-H+u9YB/cBckDO5lt5+S34gGN1EuIBjjaXk31LivQWfX3G1cqZPYCiwF9qCOkqK2NsKVk+saoUN+fLBz5tc2gFw== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.0.1" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -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= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -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= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^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= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - 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: - 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== - -is-core-module@^2.2.0, is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - 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= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -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= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -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= - -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-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -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= - -is-lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-2.0.2.tgz#1c0884d3012c841556243483aa5d522f47396d2a" - integrity sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ== - dependencies: - tslib "^2.0.3" - -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-number-object@^1.0.4: - 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@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -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= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -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-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -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-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" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -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-upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-2.0.2.tgz#f1105ced1fe4de906a5f39553e7d3803fd804649" - integrity sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ== - dependencies: - tslib "^2.0.3" - -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.2" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -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= - -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= - -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= - 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= - -isomorphic-fetch@3.0.0, isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -js-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" - integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.0.0, js-yaml@^4.1.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" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -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= - -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== - -json-parse-even-better-errors@^2.3.0: - 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== - -json-schema-traverse@^0.4.1: - version "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-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-to-pretty-yaml@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz#f4cd0bd0a5e8fe1df25aaf5ba118b099fd992d5b" - integrity sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs= - dependencies: - remedial "^1.0.7" - remove-trailing-spaces "^1.0.6" - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb" - integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q== - dependencies: - array-includes "^3.1.4" - object.assign "^4.1.2" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keen-slider@^6.6.3: - version "6.6.14" - resolved "https://registry.yarnpkg.com/keen-slider/-/keen-slider-6.6.14.tgz#f34cb40ab6f4702bc930132c95f5a7cf520e1b00" - integrity sha512-G8vg8axjy9V5CTxtpF2HHa1oXem0OWSK9rcW7yIeKhUyp3JTHYSs+pwJgJCOYkBhfA+znJZfMd6qcU00BL3CWw== - -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.5: - version "4.2.8" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.2.8.tgz#6c91189fe6134d8a526cb360566693c095fcfb60" - integrity sha512-IZZo6krhHWPhgsP5mBkEdPopVPN/stgCnBVuqi6dda/Nm5mDTOSVTrFMkWqlJsDum+B0YSe887tNxdjDWkO7aQ== - 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= - 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= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== - -language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= - dependencies: - language-subtag-registry "~0.3.2" - -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== - dependencies: - package-json "^6.3.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" - integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== - -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.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@^12.1.7: - version "12.4.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.4.1.tgz#63fa27bfc8a33515f6902f63f6670864f1fb233c" - integrity sha512-PTXgzpflrQ+pODQTG116QNB+Q6uUTDg5B5HqGvNhoQSGt8Qy+MA/6zSnR8n38+sxP5TapzeQGTvoKni0KRS8Vg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.16" - commander "^8.3.0" - debug "^4.3.3" - execa "^5.1.1" - lilconfig "2.0.4" - listr2 "^4.0.1" - micromatch "^4.0.4" - normalize-path "^3.0.0" - object-inspect "^1.12.0" - pidtree "^0.5.0" - string-argv "^0.3.1" - supports-color "^9.2.1" - yaml "^1.10.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr2@^4.0.1: - 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" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -listr@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -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= - -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= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.get@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isdate@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isdate/-/lodash.isdate-4.0.1.tgz#35a543673b9d76110de4114b32cc577048a7f366" - integrity sha1-NaVDZzuddhEN5BFLMsxXcEin82Y= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -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= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash.random@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.random/-/lodash.random-3.2.0.tgz#96e24e763333199130d2c9e2fd57f91703cc262d" - integrity sha1-luJOdjMzGZEw0sni/Vf5FwPMJi0= - -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= - -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= - -lodash@4.17.21, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^4.0.0, log-symbols@^4.1.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== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loglevel@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" - integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== - -loose-envify@^1.0.0, loose-envify@^1.1.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== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case-first@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-2.0.2.tgz#64c2324a2250bf7c37c5901e76a5b5309301160b" - integrity sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg== - dependencies: - tslib "^2.0.3" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - 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== - -lru-cache@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1, 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@^8.0.14: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -map-cache@^0.2.0, 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= - -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= - dependencies: - object-visit "^1.0.0" - -matcher@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-4.0.0.tgz#a42a05a09aaed92e2d241eb91fddac689461ea51" - integrity sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ== - dependencies: - escape-string-regexp "^4.0.0" - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -merge-stream@^2.0.0: - version "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.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -meros@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/meros/-/meros-1.2.0.tgz#096cdede2eb0b1610b219b1031b935260de1ad08" - integrity sha512-3QRZIS707pZQnijHdhbttXRWwrHhZJ/gzolneoxKVz9N/xmsvY/7Ls8lpnI9gxbgxjcHsAVEW3mgwiZCo6kkJQ== - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.4: - 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.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - 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: - 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.52.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@4.2.1, minimatch@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mk-dirs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mk-dirs/-/mk-dirs-1.0.0.tgz#44ee67f82341c6762718e88e85e577882e1f67fd" - integrity sha1-RO5n+CNBxnYnGOiOheV3iC4fZ/0= - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -mrmime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" - integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== - -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.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: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - 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== - -nanoid@^3.1.30, nanoid@^3.3.3: - 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" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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= - -next-themes@^0.0.15: - version "0.0.15" - resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.0.15.tgz#ab0cee69cd763b77d41211f631e108beab39bf7d" - integrity sha512-LTmtqYi03c4gMTJmWwVK9XkHL7h0/+XrtR970Ujvtu3s0kZNeJN24aJsi4rkZOI8i19+qq6f8j+8Duwy5jqcrQ== - -next@^12.0.8: - version "12.1.6" - resolved "https://registry.yarnpkg.com/next/-/next-12.1.6.tgz#eb205e64af1998651f96f9df44556d47d8bbc533" - integrity sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A== - dependencies: - "@next/env" "12.1.6" - caniuse-lite "^1.0.30001332" - postcss "8.4.5" - styled-jsx "5.0.2" - optionalDependencies: - "@next/swc-android-arm-eabi" "12.1.6" - "@next/swc-android-arm64" "12.1.6" - "@next/swc-darwin-arm64" "12.1.6" - "@next/swc-darwin-x64" "12.1.6" - "@next/swc-linux-arm-gnueabihf" "12.1.6" - "@next/swc-linux-arm64-gnu" "12.1.6" - "@next/swc-linux-arm64-musl" "12.1.6" - "@next/swc-linux-x64-gnu" "12.1.6" - "@next/swc-linux-x64-musl" "12.1.6" - "@next/swc-win32-arm64-msvc" "12.1.6" - "@next/swc-win32-ia32-msvc" "12.1.6" - "@next/swc-win32-x64-msvc" "12.1.6" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-domexception@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@2.6.7, 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-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= - -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== - -normalize-path@^2.0.0, normalize-path@^2.0.1, 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= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -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= - -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== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nullthrows@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - -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= - -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= - -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= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== - -object-keys-normalizer@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-keys-normalizer/-/object-keys-normalizer-1.0.1.tgz#db178dbba5e4c7b18b40837c8ef83365ee9348e7" - integrity sha1-2xeNu6Xkx7GLQIN8jvgzZe6TSOc= - dependencies: - lodash.camelcase "^4.3.0" - lodash.snakecase "^4.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== - -object-merge-advanced@12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/object-merge-advanced/-/object-merge-advanced-12.0.3.tgz#e03c19aa33cf88da6b32187e4907b487668808d9" - integrity sha512-xQIf2Vup1rpKiHr2tQca5jyNYgT4O0kNxOfAp3ZNonm2hS+5yaJgI0Czdk/QMy52bcRwQKX3uc3H8XtAiiYfVA== - dependencies: - "@babel/runtime" "^7.12.13" - array-includes-with-glob "^3.0.6" - lodash.clonedeep "^4.5.0" - lodash.includes "^4.3.0" - lodash.isdate "^4.0.1" - lodash.isplainobject "^4.0.6" - lodash.uniq "^4.5.0" - util-nonempty "^3.0.6" - -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= - 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== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.hasown@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.19.5" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.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= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -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= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -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= - -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-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== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0, 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" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -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" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-filepath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^5.0.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== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" - integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -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= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -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-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== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "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.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" - integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== - -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= - -postcss-attribute-case-insensitive@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz#39cbf6babf3ded1e4abf37d09d6eda21c644105c" - integrity sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ== - dependencies: - postcss-selector-parser "^6.0.2" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz#f59ccaeb4ee78f1b32987d43df146109cc743073" - integrity sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz#61a0fd151d28b128aa6a8a21a2dad24eebb34d52" - integrity sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz#5d397039424a58a9ca628762eb0b88a61a66e079" - integrity sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-media@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz#1be6aff8be7dc9bf1fe014bde3b71b92bb4552f1" - integrity sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g== - -postcss-custom-properties@^12.1.7: - version "12.1.7" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz#ca470fd4bbac5a87fd868636dafc084bc2a78b41" - integrity sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz#022839e41fbf71c47ae6e316cb0e6213012df5ef" - integrity sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-dir-pseudo-class@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz#9afe49ea631f0cb36fa0076e7c2feb4e7e3f049c" - integrity sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-double-position-gradients@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz#a12cfdb7d11fa1a99ccecc747f0c19718fb37152" - integrity sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-env-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" - integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" - integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-focus-within@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" - integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz#6401bb2f67d9cf255d677042928a70a915e6ba60" - integrity sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ== - -postcss-image-set-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz#bcff2794efae778c09441498f40e0c77374870a9" - integrity sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" - integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== - dependencies: - camelcase-css "^2.0.1" - -postcss-lab-function@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz#e054e662c6480202f5760887ec1ae0d153357123" - integrity sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-logical@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" - integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== - -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - -postcss-nested@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== - dependencies: - postcss-selector-parser "^6.0.6" - -postcss-nesting@^10.1.4: - version "10.1.6" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.6.tgz#9cd7221285577858a7cb38b94faabe4979226551" - integrity sha512-8C0X0pOOShlgqYkCzB4wlWLyulos+GXFpw7r2+x7g+ROQ1RwN8MlN2NCcpNQScNBPfbjxbjwY8e25raTcEXqmg== - dependencies: - "@csstools/selector-specificity" "1.0.0" - postcss-selector-parser "^6.0.10" - -postcss-nesting@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-8.0.1.tgz#4a8ab3c540a0f138fd3f5d2ee65e4a24d1888024" - integrity sha512-cHPNhW5VvRQjszFDxmy16mis9qFQqQLBNw6KVmueLqqE3M182ZAk9+QoxGqbGVryzLVhannw2B5Yhosqq522fA== - -postcss-opacity-percentage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" - integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== - -postcss-overflow-shorthand@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz#ebcfc0483a15bbf1b27fdd9b3c10125372f4cbc2" - integrity sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg== - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.4.tgz#eb026650b7f769ae57ca4f938c1addd6be2f62c9" - integrity sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^7.2.3: - version "7.5.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz#0c1f23933597d55dab4a90f61eda30b76e710658" - integrity sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ== - dependencies: - "@csstools/postcss-color-function" "^1.1.0" - "@csstools/postcss-font-format-keywords" "^1.0.0" - "@csstools/postcss-hwb-function" "^1.0.0" - "@csstools/postcss-ic-unit" "^1.0.0" - "@csstools/postcss-is-pseudo-class" "^2.0.2" - "@csstools/postcss-normalize-display-values" "^1.0.0" - "@csstools/postcss-oklab-function" "^1.1.0" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.0" - "@csstools/postcss-unset-value" "^1.0.0" - autoprefixer "^10.4.6" - browserslist "^4.20.3" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^6.6.1" - postcss-attribute-case-insensitive "^5.0.0" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.2" - postcss-color-hex-alpha "^8.0.3" - postcss-color-rebeccapurple "^7.0.2" - postcss-custom-media "^8.0.0" - postcss-custom-properties "^12.1.7" - postcss-custom-selectors "^6.0.0" - postcss-dir-pseudo-class "^6.0.4" - postcss-double-position-gradients "^3.1.1" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.3" - postcss-image-set-function "^4.0.6" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.0" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.4" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.3" - postcss-page-break "^3.0.4" - postcss-place "^7.0.4" - postcss-pseudo-class-any-link "^7.1.2" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^5.0.0" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz#ac72aac4fe11fc4a0a368691f8fd5fe89e95aba4" - integrity sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz#ac5fc506f7565dd872f82f5314c0f81a05630dc7" - integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== - dependencies: - balanced-match "^1.0.0" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: - 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" - -postcss-value-parser@^4.2.0: - 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@8.4.5: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== - dependencies: - nanoid "^3.1.30" - picocolors "^1.0.0" - source-map-js "^1.0.1" - -postcss@^8.3.5, postcss@^8.4.12: - version "8.4.13" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575" - integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA== - dependencies: - nanoid "^3.3.3" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -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= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -prettier@^2.5.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - -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" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -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= - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prop-types@^15.8.1: - 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.13.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -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" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-fast-marquee@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/react-fast-marquee/-/react-fast-marquee-1.3.2.tgz#b95150c99509cd5c0213b35c8fe776cc1d72580f" - integrity sha512-iTRVzu5c5Hig9FsgDgOveJC08PY7nQgbvnr8bBCnVibziA2onWdLJMmjxhgmxEWed7tSRffeXgkx/Gq0M/Q5OQ== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-merge-refs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" - integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== - -react-remove-scroll-bar@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.1.tgz#9f13b05b249eaa57c8d646c1ebb83006b3581f5f" - integrity sha512-IvGX3mJclEF7+hga8APZczve1UyGMkMG+tjS0o/U1iLgvZRpjFAQEUBJ4JETfvbNlfNnZnoDyWJCICkA15Mghg== - dependencies: - react-style-singleton "^2.2.0" - tslib "^2.0.0" - -react-remove-scroll@^2.4.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.3.tgz#a152196e710e8e5811be39dc352fd8a90b05c961" - integrity sha512-NQ1bXrxKrnK5pFo/GhLkXeo3CrK5steI+5L+jynwwIemvZyfXqaL0L5BzwJd7CSwNCU723DZaccvjuyOdoy3Xw== - dependencies: - react-remove-scroll-bar "^2.3.1" - react-style-singleton "^2.2.0" - tslib "^2.0.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-style-singleton@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.0.tgz#70f45f5fef97fdb9a52eed98d1839fa6b9032b22" - integrity sha512-nK7mN92DMYZEu3cQcAhfwE48NpzO5RpxjG4okbSqRRbfal9Pk+fG2RdQXTMp+f6all1hB9LIJSt+j7dCYrU11g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - -react-use-measure@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" - integrity sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig== - dependencies: - debounce "^1.2.1" - -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -readable-stream@^2.0.2: - 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== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.4.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== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -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 sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= - dependencies: - redis-errors "^1.0.0" - -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: - 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== - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -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== - dependencies: - rc "^1.2.8" - -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== - dependencies: - rc "^1.2.8" - -relay-compiler@12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-12.0.0.tgz#9f292d483fb871976018704138423a96c8a45439" - integrity sha512-SWqeSQZ+AMU/Cr7iZsHi1e78Z7oh00I5SvR092iCJq79aupqJ6Ds+I1Pz/Vzo5uY5PY0jvC4rBJXzlIN5g9boQ== - dependencies: - "@babel/core" "^7.14.0" - "@babel/generator" "^7.14.0" - "@babel/parser" "^7.14.0" - "@babel/runtime" "^7.0.0" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" - babel-preset-fbjs "^3.4.0" - chalk "^4.0.0" - fb-watchman "^2.0.0" - fbjs "^3.0.0" - glob "^7.1.1" - immutable "~3.7.6" - invariant "^2.2.4" - nullthrows "^1.1.1" - relay-runtime "12.0.0" - signedsource "^1.0.0" - yargs "^15.3.1" - -relay-runtime@12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" - integrity sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug== - dependencies: - "@babel/runtime" "^7.0.0" - fbjs "^3.0.0" - invariant "^2.2.4" - -remedial@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" - integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== - -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= - -remove-trailing-spaces@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz#4354d22f3236374702f58ee373168f6d6887ada7" - integrity sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.5.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= - -replaceall@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/replaceall/-/replaceall-0.1.6.tgz#81d81ac7aeb72d7f5c4942adf2697a3220688d8e" - integrity sha1-gdgax663LX9cSUKt8ml6MiBojY4= - -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= - -require-like@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= - -require-main-filename@^2.0.0: - version "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-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -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= - -resolve@^1.20.0, resolve@^1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - 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= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@0.12.0, retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -retry@0.13.1, retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -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== - -rewrite-imports@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/rewrite-imports/-/rewrite-imports-1.4.0.tgz#198ebb73f59cfee8d214516c774b6aeef2c54a6e" - integrity sha512-k4pGuRsZ6UMSLW4mxpKVxqvGAwXCC81ZnLD+o+S9/7b3+fZ/pguNLHZpZ7qgi/5AmtqzuzppInhaARBjjDquOA== - -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== - -rimraf@^2.5.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^6.3.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.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== - -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-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= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scuid@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/scuid/-/scuid-1.1.0.tgz#d3f9f920956e737a60f72d0e4ad280bf324d5dab" - integrity sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg== - -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.2.0, 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== - -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" - -sentence-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" - integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -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= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - 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== - -signedsource@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" - integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo= - -sirv@^1.0.7: - 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" - mrmime "^1.0.0" - totalist "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.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== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks@^2.3.3: - version "2.6.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" - integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.2.0" - -source-map-js@^1.0.1, 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: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.17: - 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" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sponge-case@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sponge-case/-/sponge-case-1.0.1.tgz#260833b86453883d974f84854cdb63aecc5aef4c" - integrity sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA== - dependencies: - tslib "^2.0.3" - -ssri@^8.0.0, 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" - -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= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -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== - -string-env-interpolation@1.0.1, string-env-interpolation@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" - integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== - -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@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.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= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.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" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.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= - -strip-final-newline@^2.0.0: - version "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@^3.1.0, 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.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stripe@^8.197.0: - version "8.222.0" - resolved "https://registry.yarnpkg.com/stripe/-/stripe-8.222.0.tgz#5f159156e411b668a88b8f957df5ac3c63b119de" - integrity sha512-hrA79fjmN2Eb6K3kxkDzU4ODeVGGjXQsuVaAPSUro6I9MM3X+BvIsVqdphm3BXWfimAGFvUqWtPtHy25mICY1w== - dependencies: - "@types/node" ">=8.1.0" - qs "^6.10.3" - -styled-jsx@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729" - integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ== - -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= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.2.1: - version "9.2.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" - integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== - -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== - -swap-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-2.0.2.tgz#671aedb3c9c137e2985ef51c51f9e98445bf70d9" - integrity sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw== - dependencies: - tslib "^2.0.3" - -swell-js@^4.0.0-next.0: - version "4.0.0-next.0" - resolved "https://registry.yarnpkg.com/swell-js/-/swell-js-4.0.0-next.0.tgz#870599372e3c9eafefeafc2c63863c4032d8be6b" - integrity sha512-OQ1FLft3ruKpQw5P0TiCzs/X2Ma95+Qz+I2Xzs4KC6v+zVaFVUGNs80dQdtjfInisWoFC7iFZF2AITgellVGAg== - dependencies: - "@babel/runtime" "7.4.5" - deepmerge "4.2.2" - isomorphic-fetch "3.0.0" - lodash "4.17.21" - object-keys-normalizer "1.0.1" - object-merge-advanced "12.0.3" - qs "6.7.0" - -swr@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8" - integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw== - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -sync-fetch@0.3.1, sync-fetch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.3.1.tgz#62aa82c4b4d43afd6906bfd7b5f92056458509f0" - integrity sha512-xj5qiCDap/03kpci5a+qc5wSJjc8ZSixgG2EUmH1B8Ea2sfWclQA7eH40hiHPCtkCn6MCk4Wb+dqcXdCy2PP3g== - dependencies: - buffer "^5.7.0" - node-fetch "^2.6.1" - -tabbable@^5.2.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.2.tgz#66d6119ee8a533634c3f17deb0caa1c379e36ac7" - integrity sha512-6G/8EWRFx8CiSe2++/xHhXkmCRq2rHtDtZbQFHx34cvDfZzIBfvwG9zGUNTWMXWLCYvDj3aQqOzdl3oCxKuBkQ== - -tailwindcss@^3.0.13: - version "3.0.24" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.24.tgz#22e31e801a44a78a1d9a81ecc52e13b69d85704d" - integrity sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig== - dependencies: - arg "^5.0.1" - chokidar "^3.5.3" - color-name "^1.1.4" - detective "^5.2.0" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.11" - glob-parent "^6.0.2" - is-glob "^4.0.3" - lilconfig "^2.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.12" - postcss-js "^4.0.0" - postcss-load-config "^3.1.4" - postcss-nested "5.0.6" - postcss-selector-parser "^6.0.10" - postcss-value-parser "^4.2.0" - quick-lru "^5.1.1" - resolve "^1.22.0" - -tar@^6.0.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -taskr@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/taskr/-/taskr-1.1.0.tgz#4f29d0ace26f4deae9a478eabf9aa0432e884438" - integrity sha1-TynQrOJvTerppHjqv5qgQy6IRDg= - dependencies: - bluebird "^3.5.0" - clor "^5.1.0" - glob "^7.1.2" - mk-dirs "^1.0.0" - mri "^1.1.0" - tinydate "^1.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= - -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= - -tinydate@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tinydate/-/tinydate-1.3.0.tgz#e6ca8e5a22b51bb4ea1c3a2a4fd1352dbd4c57fb" - integrity sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w== - -title-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-3.0.3.tgz#bc689b46f02e411f1d1e1d081f7c3deca0489982" - integrity sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA== - dependencies: - tslib "^2.0.3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -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= - -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= - 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= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -ts-log@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.4.tgz#d672cf904b33735eaba67a7395c93d45fba475b3" - integrity sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ== - -ts-node@^9: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.0.0, tslib@^1.14.1, tslib@^1.8.1, 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, tslib@^2.0.0, 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== - -tslib@~2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -turbo-darwin-64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.2.9.tgz#001159794757f77c4b016fc56d045c5e7bfc9510" - integrity sha512-rVwDQpi6p0GwTiqSsvtA1b3RvKl8l2y+ElZ3EKGiIIJYZt1D6wBMJoADaZ9uZ/LWkT+WKfAWNtKdwRmuBAOS6g== - -turbo-darwin-arm64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.2.9.tgz#fb19615984d1780fdcdd9e54a607efb46a700e72" - integrity sha512-j7NgQHkQWWODw1I/saiqmjjD54uGAEq0qTTtLI3RoLaA+yI+awXmHwsiHRqsvGSyGJlBoKBcbxXkekLf21q3GA== - -turbo-freebsd-64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-freebsd-64/-/turbo-freebsd-64-1.2.9.tgz#edb2ee840ba80c257068e339d10ac460c1f9fb10" - integrity sha512-+tLb3iCOrIeGrcOJZYey5mD9qgNgKYuwRRg6FeX/6TDITvZXcCS50A2uRbaD/PQzQKs1lHcshiCe/DRtbvJ63g== - -turbo-freebsd-arm64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.2.9.tgz#aebfb5b07a2dd6e9211fb6d9827c2f2288e2ca73" - integrity sha512-gwI8jocTf036kc9GI1BebzftxrkT5pewHPA2iqvAXAJpX01G1x1iGcl8/uIbkbL5hp038nu+l2Kb+lRI96sJuA== - -turbo-linux-32@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-32/-/turbo-linux-32-1.2.9.tgz#1462e45776d3ce93c57f2014745e7edb60910a44" - integrity sha512-Rm47bIsCHIae/DkXJ58YrWvdh8o4Ug9U4VnTDb9byXrz2B7624ol9XdfpXv429z7LXkQR1+WnwCMwFB4K6DyuQ== - -turbo-linux-64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.2.9.tgz#0eef4a6f6f267b773ea58c4bda86922092eda3eb" - integrity sha512-8Gqi+TzEdmOmxxAukU0NO0JlIqdm98C97u9qEsxWrXTFL/xL21gKCixqsBTEO7JOISC4M8VjArxjSsITRbkD5g== - -turbo-linux-arm64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.2.9.tgz#57777d356bf74ef2cc284998ef86fe19c77b92c2" - integrity sha512-FVIeM7koUtyu1cNAJhPYjb90kL/ICdWoJr4PoZZYnqty5sxLsBg75bVErEDQeDzKQvwXLlcax2lEzHvaSyn/wg== - -turbo-linux-arm@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-arm/-/turbo-linux-arm-1.2.9.tgz#2424016fb926143682f9029bd86a8d455979e075" - integrity sha512-OS+XCWiGFbuM7UNBVQdVbIJqxhVu9Sr2WxQgDcGZpCYn32yLLPlWDDGL0Cl/EG006J9k+VS1e4OzyM6kfMxS9Q== - -turbo-linux-mips64le@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-mips64le/-/turbo-linux-mips64le-1.2.9.tgz#e3bb35f53cb84ff836cf42fc576b6197c92a5e8a" - integrity sha512-2zVBnOVivWGpl51qO/lycfw7euM4b04AXYUmhsWkUN3FygIwyNgjuiMU8rxQOlu9VGX8X+WXkX2gfbgTovTeFw== - -turbo-linux-ppc64le@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.2.9.tgz#130041711579a1b6b3fe774d85c394425d45c0ac" - integrity sha512-EGgKyzf8IhodOF32BvE3Zlgbr/dSGuUbemC9RGSuhF1F1PMnP1nYS/t3JWN5QKZU4O2uWiIyLdC/0ZjtcGAcZQ== - -turbo-windows-32@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-windows-32/-/turbo-windows-32-1.2.9.tgz#89a0d8463dffba01627d69998bfe6ea5fa975511" - integrity sha512-XrMJMUtewlfksBUB0R7Tyw16IoqshVl6f/3R2ccMccddEMcvak0oW03FK9n+Y4F+wyIoJ22AVhu8jMv+HgEehA== - -turbo-windows-64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.2.9.tgz#a55e3f32996ce4a8a538f9667748e7a1129ed10e" - integrity sha512-ewhj4MrqcMpW/keag4xG7YRLTJ7PzcqBc6Kc96OGD2qfK/uJV/r7H3Xt09WuYHRWwPgGEeNn8utpqdqbYfCVDw== - -turbo-windows-arm64@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.2.9.tgz#3dc635c0031a0998be0322f9a258553f7cb4eb6e" - integrity sha512-B8BoNb/yZWAyKwQUbs2+UFzLmOu/WGv/+ADT6SQfI8jOaTenS7Od4bbMsGJT0iXcqv+v8TcWKX83KmQ6gxBQpg== - -turbo@^1.1.2: - version "1.2.9" - resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.2.9.tgz#61257149a2a29966c9941a16e0b5ad88b07b4e79" - integrity sha512-aPGzZqmUHE9yx9TS7wcAJnDmXiuQSNXDwU5b1KrgNlFuID18TL443wna79p7k4awmf4Yuhu1cSZIvO+se72iVQ== - optionalDependencies: - turbo-darwin-64 "1.2.9" - turbo-darwin-arm64 "1.2.9" - turbo-freebsd-64 "1.2.9" - turbo-freebsd-arm64 "1.2.9" - turbo-linux-32 "1.2.9" - turbo-linux-64 "1.2.9" - turbo-linux-arm "1.2.9" - turbo-linux-arm64 "1.2.9" - turbo-linux-mips64le "1.2.9" - turbo-linux-ppc64le "1.2.9" - turbo-windows-32 "1.2.9" - turbo-windows-64 "1.2.9" - turbo-windows-arm64 "1.2.9" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typescript@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== - -typescript@^4.5.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - -ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -undici@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.2.0.tgz#18c5bd59f8f1b1ed8dcc9dca2f754c44ec994059" - integrity sha512-XY6+NS3WH9b3TKOHeNz2CjR+qrVz/k4fO9g3etPpLozRvULoQmZ1+dk9JbIz40ehn27xzFk4jYVU2MU3Nle62A== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unixify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA= - dependencies: - normalize-path "^2.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= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upper-case-first@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" - integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== - dependencies: - tslib "^2.0.3" - -upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" - integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== - dependencies: - tslib "^2.0.3" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -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= - -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" - -use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== - dependencies: - tslib "^2.0.0" - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -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= - -util-nonempty@^3.0.6: - version "3.1.0" - resolved "https://registry.yarnpkg.com/util-nonempty/-/util-nonempty-3.1.0.tgz#927a9472ead1817afca159b209e5806523b752d3" - integrity sha512-OSZlWoCL74Go83Qw/aeZgSmFZnp9d06bF77b1eAOKipkPWhvxjRYB2nmKiGspoVjkJJEJimzxAgBFUQiUV/oZQ== - dependencies: - "@babel/runtime" "^7.14.0" - lodash.isplainobject "^4.0.6" - -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuidv4@^6.2.12: - version "6.2.13" - resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" - integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== - dependencies: - "@types/uuid" "8.3.4" - uuid "8.3.2" - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - -value-or-promise@1.0.11, value-or-promise@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" - integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -web-streams-polyfill@4.0.0-beta.1: - version "4.0.0-beta.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz#3b19b9817374b7cee06d374ba7eeb3aeb80e8c95" - integrity sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ== - -web-streams-polyfill@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - -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= - -webpack-bundle-analyzer@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz#2f3c0ca9041d5ee47fa418693cf56b4a518b578b" - integrity sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA== - dependencies: - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^6.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - -whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - -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= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -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= - -which@^2.0.1: - 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" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^7.3.1: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -ws@^8.3.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23" - integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw== - -xtend@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml-ast-parser@^0.0.43: - version "0.0.43" - resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" - integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.0.0: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -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==